首页 > 解决方案 > 如何通过引用另一个 HashMap 对 HashMap 进行排序

问题描述

我有两个HashMap在 Java 中。

第一个包含一个键和它的值。其中 second 包含该键的评估索引(顺序)。我想通过参考第二张地图对第一张地图进行排序。

第一个HashMap<key, value>

<"C","ccc">
<"D","ddd">
<"A","aaa">
<"B","bbb">

第二个HashMap<key, value>

<"0","A">
<"1","B">
<"2","C">
<"3","D">

结果应该是

<"A","aaa">
<"B","bbb">
<"C","ccc">
<"D","ddd">

循环这两个映射并检查比较键很简单但效率不高。有什么有效的想法吗?

标签: javacollectionshashmaplinkedhashmap

解决方案


您可以使用 Java Stream API。首先,按键对第二个映射条目集进行排序,然后将第二个映射的值映射为键,并按第二个映射的值获取第一个映射的值,然后按LinkedHashMap使用收集Collectors.toMap

secondMap.entrySet().stream()
         .sorted(Comparator.comparing(Map.Entry::getKey))
         .collect(Collectors.toMap(Map.Entry::getValue, k -> firstMap.get(k.getValue()),
                                                          (x, y) -> y, LinkedHashMap::new));

如果您对第二个地图使用按键排序的 LinkedHashMap/TreeMap,那么您不需要对键进行排序。在此处查看演示


推荐阅读