有两张 map
-
<Integer,String> map1
这是<ID,Question>
-
<Integer,String> map2
这是<ID,Answer>
我想将它们合并到一张 map 中<String,String> resultMap
这是 <Question,Answer>
这样,该映射中的键是来自map1(问题)的值,而resultMap中的值是来自map2(答案)的值,并且这是基于相同的ID。
我可以在 java 6 中轻松完成此操作,如下面的代码所示。
for(Map.Entry<Integer,String> entry:map1.entrySet()){
qaMap.put(entry.getValue(),map2.get(entry.getKey()));
}
但我想使用流和 lambda 在 Java 8 中编写此代码。如何做到这一点?
最佳答案
假设您的 key (ID)在两个 map 中都是相同的,我们可以做类似的事情
Map<String,String> map = map1.keySet().stream()
.collect(Collectors.toMap(map1::get, map2::get));
- 在上面的语句中,
map1.keySet().stream()
将为您提供 ID 流。 - 然后
collect(Collectors.toMap(map1::get, map2::get)
将从 ID 流中创建一个 Map,其键为map1.get(id)
code> (即您的问题)和每个 id 的map2.get(id)
值(即您的答案)。
关于lambda - 在 Java 8 中将不同类型映射合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44815994/