Java 8:如何“JOIN”两个具有相同键的Map?

3

我有两个 Map,它们共享相同的键。

Map<Long/*JOIN.ID*/, Long/*Temp ID*/> tempIDsMap;
Map<Long/*JOIN.ID*/, Long/*Real ID*/> realIDsMap;

我想要获得的内容(可能使用Java 8 Stream API,避免使用循环)是将这些地图在JOIN.ID键上进行联接,以获得如下的新地图:
Map<Long/*Temp ID*/. Long/*Real ID*/> realIDsByTempMap;

我不知道是否有任何特定的框架可以为您完成此任务,因此您必须创建自己的逻辑以完成此任务。您目前尝试了什么?你能提供你所尝试的代码吗?你能指出具体的问题或困难吗? - Korashen
为什么不使用循环呢? - Lino
什么是按键连接?你的映射是 Map<Long, Long>。那么在最终映射中选择哪个值呢(因为同一键可能有不同的值)?你想要创建 Map<Long, List<Long>> 吗? - Shubhendu Pramanik
1个回答

4
使用Collectors.toMap
Map<Long,Long> realIDsByTempMap = 
    tempIDsMap.entrySet()
              .stream()
              .collect(Collectors.toMap(Map.Entry::getValue,
                       e -> realIDsMap.get(e.getKey())));

1
不错,但我敢打赌肯定有人已经找到了相似的。今天懒得再去搜索了 ;-) - GhostCat
1
这里是:https://dev59.com/p4Dba4cB1Zd3GeqPCUkL#24018167 - DimaSan
1
@DimaSan,我们结束了;-) - GhostCat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接