List集合排序及去重


1.单属性变量List排序

  1.1按照变量属性升序,降序排序

      List<Integer> lists = Arrays.asList(10,1,6,4,8,7,9,3,2,5);
        System.out.println("lists = " + lists);
        Collections.sort(lists);// 升序排列
        System.out.println("lists = " + lists);
        Collections.reverse(lists); // 倒序排列
        System.out.println("lists = " + lists);

1.2按照自定义的顺序排序

 List<String> list = Arrays.asList("北京","上海","北京","广州","广州","上海","北京","上海");

        List<String> sortRule = Arrays.asList("北京","上海","广州");


        Collections.sort(list, new Comparator<String>() // 升序排列
        {

            @Override
            public int compare(String a1, String a2) {
                int io1 = sortRule.indexOf(a1);
                int io2 = sortRule.indexOf(a2);
                return io1 - io2;

            }
        });
        System.out.println("lists = " + list);
        Collections.sort(list, new Comparator<String>() // 升序排列
        {

            @Override
            public int compare(String a1, String a2) {
                int io1 = sortRule.indexOf(a1);
                int io2 = sortRule.indexOf(a2);
                return io2-io1;

            }
        });

        System.out.println("lists = " + list);


2.对象List排序

  2.1按照对象单属性升序,降序排序

      System.out.println("按照分数升序排序:");
        students.sort(comparing(Student::getScore));
        for (Student s : students) {
            System.out.println(s.getName() + " " + s.getScore() + " " + s.getHeight() + " " + s.getCollege() + "" + s.getAddress());

        }

        System.out.println("按照分数降序排序:");
        students.sort(comparing(Student::getScore).reversed());
        for (Student s : students) {
            System.out.println(s.getName() + " " + s.getScore() + " " + s.getHeight() + " " + s.getCollege() + "" + s.getAddress());

        }

         

 

   2.2按照对象多属性升序,降序排序

 List<Student> students = new ArrayList<>();
        students.add(new Student("张三",90,180,"电气学院","北京"));
        students.add(new Student("李四",80,165,"计算机学院","上海"));
        students.add(new Student("王五",91,170,"财经学院","上海"));
        students.add(new Student("赵明",80,182,"计算机学院","北京"));
        students.add(new Student("钱海",75,181,"计算机学院","广州"));
        students.add(new Student("孙理",82,172,"财经学院","上海"));
        students.add(new Student("周伟",90,168,"电气学院","广州"));
        students.add(new Student("郑亮",80,178,"财经学院","广州"));

        System.out.println("按照分数降序排序,当分数相同时, 按照身高升序排序");
        students.sort(comparing(Student::getScore).reversed().thenComparing(Student::getHeight));

        for (Student s : students){
            System.out.println(s.getName()+" "+ s.getScore()+" "+s.getHeight()+" "+s.getCollege()+""+s.getAddress());

    }

        System.out.println("按照分数降序排序,当分数相同时, 按照身高降序排序");
        Collections.sort(students, new Comparator<Student>()
        {
            public int compare(Student student1, Student student2)
            {
                if(student1.getScore().equals(student2.getScore())){
                    return student2.getHeight() - student1.getHeight();
                }else{
                    return student2.getScore() - student1.getScore();
                }
            }
        });

        for (Student s : students){
            System.out.println(s.getName()+" "+ s.getScore()+" "+s.getHeight()+" "+s.getCollege()+""+s.getAddress());

        }

2.3按照对象自定义单属性的顺序排序

  System.out.println("自定义按照地区(北京,上海,广州)排序:");
        List<String> addressOrder = Arrays.asList("北京","上海","广州");
        Collections.sort(students, new Comparator<Student>()
        {
            public int compare(Student student1, Student student2)
            {
                int io1 = addressOrder.indexOf(student1.getAddress());
                int io2 = addressOrder.indexOf(student2.getAddress());
                return io1 - io2;
            }
        });

        for (Student s : students){
            System.out.println(s.getName()+" "+ s.getScore()+" "+s.getHeight()+" "+s.getCollege()+""+s.getAddress());

        }

2.4按照对象自定义多属性的顺序排序


        System.out.println("先按照学院(电气学院,计算机学院,财经学院)排序, 当学院相同时,按照地区(北京,上海,广州)排序");
        List<String> collegeOrder = Arrays.asList("电气学院","计算机学院","财经学院");
        List<String> addressOrder = Arrays.asList("北京","上海","广州");
        Collections.sort(students, new Comparator<Student>()
        {
            public int compare(Student student1, Student student2)
            {
                if(student1.getCollege().equals(student2.getCollege())){
                    int io1 = addressOrder.indexOf(student1.getAddress());
                    int io2 = addressOrder.indexOf(student2.getAddress());
                    return io1 - io2;
                }else{
                    int io1 = collegeOrder.indexOf(student1.getCollege());
                    int io2 = collegeOrder.indexOf(student2.getCollege());
                    return io1 - io2;
                }
            }
        });

        for (Student s : students){
            System.out.println(s.getName()+" "+ s.getScore()+" "+s.getHeight()+" "+s.getCollege()+""+s.getAddress());

        }

 

 


————————————————

https://blog.csdn.net/yuanfang0907/article/details/87362492

https://blog.csdn.net/veryisjava/article/details/51675036

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值