【SpringBoot】List<实体类>如何去重,单、多属性去重

简介: 【SpringBoot】List<实体类>如何去重,单、多属性去重

sql中去重可以使用distinct关键字,但是有时候需要在list中去重,大概有以下几种方式

1.嵌套for循环去重

因为list删除一个元素会让后面的元素前移,所以可以倒着删除,也可以使用迭代器

                for (int i = projectList.size() - 1; i >= 0; i--) {
                    for (int j = projectList.size() - 1; j >= 0; j--) {
                        if (projectList.get(i).getId().equals(projectList.get(j).getId())) {                      
                               projectList.remove(j);
                               i-=1;                       
                        }
                    }
                }

2.根据equals方法去重

list

3. HashSet去重

利用set元素不可重复的特性

/// 去重
                    Set<Project> userSet = new HashSet<>(projectFatherList);
                    projectFatherList = new ArrayList<>(userSet);

4. stream流去重

普通版

projectList=projectList.stream().distinct().collect(Collectors.toList());

根据某个字段去重

// 第一种
 projectList = projectList.stream().filter(distinctByKey((p) -> (p.getT_custId()))).collect(Collectors.toList());


   public static <T>Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor){
        Map<Object,Boolean> seen = new ConcurrentHashMap<>();
        return t -> seen.putIfAbsent(keyExtractor.apply(t),Boolean.TRUE) == null;
    }
// 第二种
collectingAndThen

 List<ExportTemperatureDto> result = temperatureList.stream()
                .collect(
                        collectingAndThen(
                                toCollection(
                                        () -> new TreeSet<>(comparing(ExportTemperatureDto::getPersonId))
                                ),
                                ArrayList::new
                        )
                );

根据某个字段去重也可以重写实体的equals方法

根据多个字段去重

        List<ResourcesData> distinctClass = resourcesDataList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getSkill() + ";" + o.getTechLevel()))), ArrayList::new));

总结

总体上stream流去重是比较方便的,速度上也是比较快

目录
相关文章
|
8月前
|
开发框架 .NET
list 去重
list 去重
|
1月前
|
Java
Java使用List去重的四中方式
Java使用List去重的四中方式
19 6
|
5月前
|
XML Java 数据格式
spring怎么去引用/注入集合/数组类型和 怎么通过 util 名称空间创建 list以及 怎么去通过级联属性赋值
spring怎么去引用/注入集合/数组类型和 怎么通过 util 名称空间创建 list以及 怎么去通过级联属性赋值
33 0
|
5月前
|
Java
JDK8 Stream之如何给List属性去重?
JDK8 Stream之如何给List属性去重?
55 0
|
5月前
|
Java 数据库连接
hibernate-validator校验对象属性为List
hibernate-validator校验对象属性为List
52 1
|
6月前
|
容器
List特点和遍历方式及增长因子论证和去重原理和LinkedList特点
List特点和遍历方式及增长因子论证和去重原理和LinkedList特点
27 0
|
7月前
|
Java
【Java用法】java 8两个List集合取交集、并集、差集、去重并集
【Java用法】java 8两个List集合取交集、并集、差集、去重并集
190 0
|
8月前
|
Java
Java List集合去重的多种方法
Java List集合去重的多种方法
70 0
|
8月前
|
存储 Java 程序员
Java集合List介绍和去重方案
Java集合List介绍和去重方案
70 0
|
9月前
|
Java 数据格式 Spring
SpringBoot中@Value注解注入List或Map数据格式出现异常
在做一个小demo的时候、做的例子是我想在程序运行时将一些数据放入到配置类中的属性中、我想到可以通过yaml配置的数据映射到实体类中的属性中、我在想通过这种形式能不能映射。