在Java 8中将不同类型的映射合并为一个

vla*_*xmi 6 lambda java-8 java-stream

有两张地图

  • <Integer,String> map1 是的 <ID,Question>
  • <Integer,String> map2 是的 <ID,Answer>

我想将它们合并到一个映射<String,String> resultMap<Question,Answer>,这个映射中的Key是map1(Question)中的值,resultMap中的值是map2(Answer)中的值,这是基于相同的ID.

我可以在java 6中轻松完成此操作,如下面的代码所示.

for(Map.Entry<Integer,String> entry:map1.entrySet()){
    qaMap.put(entry.getValue(),map2.get(entry.getKey()));
}
Run Code Online (Sandbox Code Playgroud)

但我想用Java和lambdas在Java 8中编写这个.怎么做?

Ran*_*eet 9

假设你的密钥(ID)在两个地图中是相同的,我们可以做类似的事情

Map<String,String> map = map1.keySet().stream()
    .collect(Collectors.toMap(map1::get, map2::get));
Run Code Online (Sandbox Code Playgroud)
  • 在上面的语句中,map1.keySet().stream()将为您提供ID流.
  • 然后collect(Collectors.toMap(map1::get, map2::get)将从ID流中创建一个Map,其中键为map1.get(id)(即您的问题),并map2.get(id)为每个id创建值(即您的答案).