0
点赞
收藏
分享

微信扫一扫

三分钟小知识-----开发常用List去重方案

是她丫 2022-04-07 阅读 8
java

List去重

非对象(String)

Stream

    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("111");
        list.add("222");
        list.add("云");
        list.add("云");
        list.add("222");
        List<String> collect = list.stream().distinct().collect(Collectors.toList());
        collect.forEach(System.out::println);
    }
    

运行结果:

在这里插入图片描述

set

   public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("111");
        list.add("222");
        list.add("云");
        list.add("云");
        list.add("222");
        List<String> newList = new ArrayList<>(new TreeSet<>(list));
        newList.forEach(System.out::println);
    }

运行结果:
![在这里插入图片描述](https://file.cfanz.cn/uploads/png/2022/04/07/6/9N3U05192F.png

对象(Object)

set去重

 public static void main(String[] args) {
     new Test().distinctList();
    }
 public void distinctList(){
    List<Student> list = new ArrayList<>();
    Student student = new Student();
    student.setName("孙悟空");
    student.setAge(12);
    student.setSex("男");
    list.add(student);
    student = new Student();
    student.setName("孙悟空");
    student.setAge(15);
    student.setSex("男");
    list.add(student);
    student = new Student();
    student.setName("孙悟空");
    student.setAge(12);
    student.setSex("男");
    list.add(student);
    // 使用name 去重
    TreeSet<Student> students = new TreeSet<>(Comparator.comparing(Student::getName));
    // 多个
//    TreeSet<Student> students = new TreeSet<>(Comparator.comparing(item->item.getName()+";"+item.getAge()));
    // 结果
    //Test.Student(name=孙悟空, age=12, sex=男)
    //Test.Student(name=孙悟空, age=15, sex=男)
    students.addAll(list);
    list = new ArrayList<>(students);
    list.forEach(System.out::println);
}
    @Data
    class Student {
      private String name;
      private Integer age;
      private String sex;
    }

stream 去重对象

思想其实和上一个一样就是写法装逼一点 核心还是set

 public static void main(String[] args) {
        new Test().distinctList();
    }

    public void distinctList() {
        List<Student> list = new ArrayList<>();
        Student student = new Student();
        student.setName("孙悟空");
        student.setAge(12);
        student.setSex("男");
        list.add(student);
        student = new Student();
        student.setName("孙悟空");
        student.setAge(15);
        student.setSex("男");
        list.add(student);
        student = new Student();
        student.setName("孙悟空");
        student.setAge(12);
        student.setSex("男");
        list.add(student);
        // 单个name
//        list = list.stream().collect(
//                Collectors.collectingAndThen(
//                        Collectors.toCollection(() -> new TreeSet<>(
//                                Comparator.comparing(Student::getName))), ArrayList::new));
        // 执行结果
        // Test.Student(name=孙悟空, age=12, sex=男)
        // 连个或两个以上
        list = list.stream().collect(
                Collectors.collectingAndThen(
                        Collectors.toCollection(() -> new TreeSet<>(
                                Comparator.comparing(item -> item.getName() + ";" + item.getAge()))), ArrayList::new));
        //执行结果
        //Test.Student(name=孙悟空, age=12, sex=男)
        //Test.Student(name=孙悟空, age=15, sex=男)
        list.forEach(System.out::println);
    }

    @Data
    class Student {
        private String name;
        private Integer age;
        private String sex;
    }
举报

相关推荐

0 条评论