【问题标题】:Merge different type maps into one in Java 8在 Java 8 中将不同的类型映射合并为一个
【发布时间】:2017-06-29 03:41:25
【问题描述】:

有两张地图

  • <Integer,String> map1 即 <ID,Question>
  • <Integer,String> map2 即 <ID,Answer>

我想将它们合并到一个单一的地图<String,String> resultMap 这是<Question,Answer> 这样地图中的键是来自 map1(Question) 的值,而 resultMap 中的值是来自 map2(Answer) 的值,这是基于在同一个 ID 上。

我可以在 java 6 中轻松做到这一点,如下面的代码所示。

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

但我想在 Java 8 中使用流和 lambda 来编写它。该怎么做?

【问题讨论】:

    标签: lambda java-8 java-stream


    【解决方案1】:

    假设您的密钥(ID)在两个地图中都相同,我们可以执行类似的操作

    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,每个 ID 的键为 map1.get(id)(即您的问题),值为 map2.get(id)(即您的答案)。

    【讨论】:

      【解决方案2】:

      @above 解决方案很优雅但是应该有人给出初学者应该理解的替代解决方案。所以我可以选择foreach 和lambda。 您可以遍历每个map1 并添加到qaMap。

      Map<Integer,String> map1 = new HashMap<>();
      Map<Integer,String> map2 = new HashMap<>();
      Map<String,String> qaMap = new HashMap<>();
      map1.put(1,"what is your age");
      map2.put(1,"25");
      
      map1.forEach((k,v)->qaMap.put(v,map2.get(k)));
      System.out.println(qaMap.size());
      

      【讨论】:

        猜你喜欢
        • 2022-01-18
        • 2021-12-22
        • 2020-02-10
        • 2021-09-22
        • 2022-10-23
        • 1970-01-01
        • 2016-05-05
        • 2019-01-12
        • 1970-01-01
        相关资源
        最近更新 更多