我有两个类型为 List
如果 list2 中有条目,我想要 list2 的条目。如果 list2 中不存在特定条目,我希望检索 list1 数据。
list1 总是有数据,list2 在某些条件下会有一些数据。
如何在 Stream API 中实现这一点
我有两个类型为 List
如果 list2 中有条目,我想要 list2 的条目。如果 list2 中不存在特定条目,我希望检索 list1 数据。
list1 总是有数据,list2 在某些条件下会有一些数据。
如何在 Stream API 中实现这一点
List
List<Map<String, Object>> list = list2.stream().filter(t -> t.get("key") != null && t.get("key").equals( data.get("key"))).collect(Collectors.toList());
if(CollectionUtils.isNotEmpty(list)) {
return false;
} else {
return true;
}
}
).collect(Collectors.toList());
您可以使用 concat 与自定义逻辑来选择键,如下例所示。
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Main
{
public static void main(String[] args) {
Map<String, Object> indiaMap1 = new HashMap<>();
indiaMap1.put("stdcode", 91);
indiaMap1.put("ISO", "IND");
/*Map<String, Object> usaMap1 = new HashMap<>();
usaMap1.put("stdcode", 1);
usaMap1.put("ISO", "USA");*/
List<Map<String, Object>> list1 = new ArrayList<>();
list1.add(Map.of("India", indiaMap1));
/*list1.add(Map.of("USA", usaMap1));*/
// Second List (with updated or new entries)
Map<String, Object> indiaMap2 = new HashMap<>();
indiaMap2.put("stdcode", 92); // Updated stdcode for India
indiaMap2.put("ISO", "IND");
Map<String, Object> canadaMap2 = new HashMap<>();
canadaMap2.put("stdcode", 2);
canadaMap2.put("ISO", "CAN");
List<Map<String, Object>> list2 = new ArrayList<>();
list2.add(Map.of("India", indiaMap2));
list2.add(Map.of("Canada", canadaMap2));
// Merging lists
List<Map<String, Object>> mergedList = Stream.concat(list1.stream(), list2.stream())
.collect(Collectors.toMap(
map -> map.keySet().iterator().next(), // Assumes each map has only one key
Function.identity(),
(mapFromList1, mapFromList2) -> mapFromList2 // Prioritize entry from list2
))
.values()
.stream()
.collect(Collectors.toList());
// Output the merged list
mergedList.forEach(System.out::println);
}
}