【问题标题】:How to iterate over 2 hashmap for same key and add key and both values to object [closed]如何为相同的键迭代2个哈希图并将键和两个值添加到对象[关闭]
【发布时间】:2021-10-17 05:51:19
【问题描述】:

我正在学习集合,我想使用流循环 2 个 HashMap 并将键和两个值添加到 List 对象。

例如:

HashMap<String, String> map1= new LinkedHashMap<String, String>();
HashMap<String, String> map2= new LinkedHashMap<String, String>();

map1.put("A", "Apple");
map1.put("B", "Ball");
map1.put("C", "Cucumber");
map1.put("D", "Dairy");

map2.put("A", "Airplane");
map2.put("B", "Baby");
map2.put("C", "Cat");
map2.put("D", "Dog");
class DummyClass {
    
    String Key;
    String Value1;
    String Value2;

    // getters and setters..
} 
List<DummyClass> test = Add key, and both Values

输出预期

DummayClass Obj1 = {A,Apple,Airplane};
DummayClass Obj2 = {B,Ball,Baby}; likewise 

我可以通过迭代单个地图并比较密钥并添加它来实现这一点。但我想使用Streams 来达到同样的效果。

【问题讨论】:

标签: java collections java-stream


【解决方案1】:

遍历map1 的条目集。流操作很好。对于每个条目,检查密钥是否也在map2 中(使用您的流的filter 方法)。如果是,则从两个映射中的键和值创建一个 DummyClass 对象。

PS 同样在您的DummyClass 中尊重Java 命名约定。实例变量名称以小写字母开头,如keyvalue1value2。还要为该类编写一个构造函数。

教程链接:Iterate over a Map in Java | Baeldung(附有使用 Stream API 的部分)

文档链接:

【讨论】:

    【解决方案2】:

    定义一个记录来保存结果。

    record Combo ( String k , String x , String y ) {}
    

    从第一个映射中创建一个条目流。从每个条目中提取键和值。将它们传递给我们的组合类的构造函数,以及第三个参数,它是第二个映射的值,通过第一个映射的键访问。

    这里有一些未经测试的代码可供尝试。

    List< Combo } combos = mapX.entrySet().stream().map( entry -> new Combo( entry.getKey() , entry.getValue() , mapY.get( entry.getKey() ) ) ).toList() ;
    

    【讨论】:

      【解决方案3】:

      我不知道有什么方法可以同时迭代两个 HashMap,但你可以这样做:

      List<DummyClass> objects = 
          map1.entrySet().stream().map(object -> {
              return new DummyClass(object.getKey(), object.getValue(), map2.get(object.getKey()));
          }).collect(Collectors.toList());
      

      这会将 map1 中的所有键值对映射到 DummyClass 的新实例,同时从 map2 中选择具有相同键的值。 作为 Ole V.V.正确地说,您应该添加检查以查看 map1 中的键是否实际上是 map2 中的有效键。

      请注意,您必须在 DummyClass 中添加一个构造函数才能使此代码正常工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-14
        • 2016-06-30
        • 2023-03-18
        相关资源
        最近更新 更多