java - 如何通过引用另一个 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">
循环这两个映射并检查比较键很简单但效率不高。有什么有效的想法吗?
解决方案
您可以使用 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,那么您不需要对键进行排序。在此处查看演示
推荐阅读
- django - Django多表连接使用ORM
- c# - OData v4 扩展语法返回错误“...属性 'ProductType' 不能在 $expand 查询选项中使用。”
- ionic-framework - Ionic 4:离子选择在 IOS 上效果不佳
- reactjs - 使用 Axios 在 ReactJS 中访问被 CORS 策略阻止的 XMLHttpRequest
- python - 如何使用 matplotlib 的颜色图初始化调色板?
- flutter - Flutter 中的命名路由如何消除重复?
- decimal - 电源查询舍入不正确,不正确向上或向下舍入
- google-cloud-platform - Google Cloud Service 帐户具有 Translate API 访问权限,但未分配任何角色
- javascript - 将字符串转换为 Spinal Case
- python - 通过不同的索引数组切片矩阵