Featured image of post Java集合根据某 单个/多个 字段的值是否相同,判重、去重

Java集合根据某 单个/多个 字段的值是否相同,判重、去重

去重

单个字段

1
2
3
4
List<Entity> distinctList = Optional.ofNullable(list).orElse(new ArrayList<>())
    .stream().filter(Objects::nonNull)
    .collect(toMap(s -> s.getCloumn(), Function.identity(), (s1, s2) -> s1))
    .values().stream().collect(Collectors.toList());

两个字段

1
2
3
4
List<Entity> distinctList = Optional.ofNullable(list).orElse(new ArrayList<>())
    .stream().filter(Objects::nonNull)
    .collect(toMap(s -> s.getCloumn(), Function.identity(), (s1, s2) -> s1))
    .values().stream().collect(Collectors.toList());

判重

单个字段

方式一

1
2
3
4
5
6
7
8
9
boolean existence = !ObjectUtils.isEmpty(
        Optional.ofNullable(list).orElse(new ArrayList<>())
                .stream()
                .collect(groupingBy(User::getKey))
                .entrySet().stream()
                .filter(entry -> entry.getValue().size() > 1)
                .map(Map.Entry::getKey)
                .collect(toList())
); // true,则有

方式二

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
Map<String, Long> keyCountMap = Optional.ofNullable(list).orElse(new ArrayList<>())
        .stream().filter(Objects::nonNull)
        .collect(groupingBy(s -> s.getKey(), counting()));

// 查询某个key出现的次数
Long count = Optional.of(keyCountMap).map(s -> s.get(key)).orElse(0L);

// 判断key是否重复
keyCountMap.values().forEach(count -> {
    if (count > 1) {
        throw new RuntimeException("key相同的数据,不能重复");
    }
});

两个字段

方式一

1
2
3
4
5
6
7
8
9
boolean existence = !ObjectUtils.isEmpty(
        Optional.ofNullable(list).orElse(new ArrayList<>())
                .stream()
                .collect(groupingBy(s -> Pair.of(s.getKey1(), s.getKey2())
                .entrySet().stream()
                .filter(entry -> entry.getValue().size() > 1)
                .map(Map.Entry::getKey)
                .collect(toList())
); // true,则有

方式二

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
Map<String, Long> key1key2CountMap = Optional.ofNullable(list).orElse(new ArrayList<>())
        .stream().filter(Objects::nonNull)
        .collect(groupingBy(s -> Pair.of(s.getKey1(), s.getKey2()), counting()));

// 查询两个key值都相同,出现的次数
Long count = Optional.of(key1key2CountMap).map(s -> Pair.of(s.getKey1(), s.getKey2())).orElse(0L);

// 判断查询两个key值都相同的数据,是否重复
key1key2CountMap.values().forEach(count -> {
    if (count > 1) {
        throw new RuntimeException("key1和key2都相同的数据,不能重复");
    }
});
Licensed under CC BY-NC-SA 4.0
皖ICP备2024056275号-1
发表了78篇文章 · 总计149.56k字
本站已稳定运行