java 把两个list中id相同的数据进行互补,并且提供merge 方法的实现
时间: 2023-03-28 19:03:13 浏览: 88
可以使用 Java 8 的 Stream API 来实现这个功能。首先,将两个 List 转换成 Map,其中 key 是 id,value 是对应的对象。然后,使用 Stream 的 flatMap 方法将两个 Map 合并成一个,对于相同的 key,使用 merge 方法将两个对象合并。最后,将合并后的 Map 转换成 List 返回即可。以下是示例代码:
```
public static <T extends HasId> List<T> mergeLists(List<T> list1, List<T> list2) {
Map<Long, T> map1 = list1.stream().collect(Collectors.toMap(HasId::getId, Function.identity()));
Map<Long, T> map2 = list2.stream().collect(Collectors.toMap(HasId::getId, Function.identity()));
Map<Long, T> mergedMap = Stream.concat(map1.entrySet().stream(), map2.entrySet().stream())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (v1, v2) -> {
v1.merge(v2);
return v1;
}));
return new ArrayList<>(mergedMap.values());
}
```
其中,HasId 是一个接口,包含一个 getId 方法和一个 merge 方法,用于合并两个对象。具体实现可以根据业务需求进行定义。