使用Java 8的Stream API来对集合中的数据根据id去重并且同一个id只取符合条件的那一个

发布时间 2023-10-25 10:48:13作者: 小钰Kira

` 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