如何为相同的键迭代 2 个哈希图并将键和两个值添加到对象

How to iterate over 2 hashmap for same key and add key and both values to object

我正在学习集合,我想使用流循环遍历 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.

来达到同样的效果

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

PS 同样在您的 DummyClass 中尊重 Java 命名约定。实例变量名称以小写字母开头,因此 keyvalue1value2。还为 class.

编写一个构造函数

教程 link:Iterate over a Map in Java | Baeldung(包含关于使用 Stream 的部分 API)

文档 links:

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

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

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

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

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

我不知道有什么方法可以同时迭代两个 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 中选取具有相同键的值。 作为奥莱 V.V。正确地说你应该添加一个检查以查看 map1 中的密钥是否实际上是 map2 中的有效密钥。

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