java8 stream替换list1与list2相同key的value
假设有两个列表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));
});
解释一下上面的代码:
- 首先,我们定义了两个列表list1和list2,并向它们中分别添加了一个Map对象,这些Map对象包含了一些键值对。
- 然后,我们使用Java 8的Stream对list1进行遍历,对于每个Map对象,我们获取它的"name"键对应的值,并使用Stream过滤list2中含有相同"name"键值对的Map对象,这里使用了Optional避免了空指针异常。
- 如果找到了与list1中的Map对象相同的Map对象,则将该Map对象中的所有键值对都复制到list1中的Map对象中。
最终,list1中所有与list2中相同的键都被替换成了list2中对应的值
原文地址: https://www.cveoy.top/t/topic/eYN0 著作权归作者所有。请勿转载和采集!