` List dataList = new ArrayList<>();
dataList.add(new Data(1, "A"));
dataList.add(new Data(2, "B"));
dataList.add(new Data(1, "C"));
dataList.add(new Data(3, "D"));
Map<Integer, Data> filteredMap = dataList.stream()
.collect(Collectors.toMap(Data::getId, data -> data, (existing, replacement) -> {
if (existing.getName().equals("A")) {
return existing;
} else if (replacement.getName().equals("A")) {
return replacement;
} else {
return existing;
}
}));
List<Data> filteredList = new ArrayList<>(filteredMap.values());
System.out.println(filteredList);`
首先使用Collectors.toMap()方法将集合中的数据根据id去重,并且在合并冲突时根据条件选择保留哪一个数据。在合并冲突时,我们使用了一个lambda表达式来判断哪一个数据符合条件。如果已存在的数据的name为"A",则保留已存在的数据;如果替代的数据的name为"A",则保留替代的数据;否则,保留已存在的数据。最后,我们将去重后的数据转换为一个新的List