假设有两个列表list1和list2,都包含一个Map对象,其中包含一些键值对。现在要将list1中所有与list2中相同的键替换为list2中对应的值,可以使用下面的代码:

List<Map<String, String>> list1 = new ArrayList<>();
List<Map<String, String>> list2 = new ArrayList<>();

// 假设list1和list2中都有一个名为"name"的键
Map<String, String> map1 = new HashMap<>();
map1.put("name", "张三");
map1.put("age", "20");
list1.add(map1);

Map<String, String> map2 = new HashMap<>();
map2.put("name", "李四");
map2.put("sex", "男");
list2.add(map2);

// 使用Java 8的Stream替换list1中与list2中相同键的值
list1.stream()
    .forEach(map -> {
        String name = map.get("name");
        Optional<Map<String, String>> optional = list2.stream()
            .filter(m -> m.containsKey("name") && m.get("name").equals(name))
            .findFirst();
        optional.ifPresent(m -> map.putAll(m));
    });

解释一下上面的代码:

  1. 首先,我们定义了两个列表list1和list2,并向它们中分别添加了一个Map对象,这些Map对象包含了一些键值对。
  2. 然后,我们使用Java 8的Stream对list1进行遍历,对于每个Map对象,我们获取它的"name"键对应的值,并使用Stream过滤list2中含有相同"name"键值对的Map对象,这里使用了Optional避免了空指针异常。
  3. 如果找到了与list1中的Map对象相同的Map对象,则将该Map对象中的所有键值对都复制到list1中的Map对象中。

最终,list1中所有与list2中相同的键都被替换成了list2中对应的值

java8 stream替换list1与list2相同key的value

原文地址: https://www.cveoy.top/t/topic/eYN0 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录