Java对List集合排序

1.单属性变量集合排序,如LIst<Integer>

 List<Integer> intList = new ArrayList<>();
        intList.add(54);
        intList.add(7674);
        intList.add(636);
        intList.add(4325);
        intList.add(21);
        intList.add(432143);
        Collections.sort(intList);
        for (Integer i : intList) {
            System.out.print(i + " ");
        }

结果是21 54 636 4325 7674 432143

Collections类提供了对集合操作的一些方法,注意是Collections而不是Collection,后者是集合的顶级接口。

使用Collerctions类的sort()方法实现升序排序,相反的,方法reverse()则实现降序排序。

2.多属性对象集合排序,如List<Student>
Student类就不写了,共三个属性,配上get,set就行。

 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,180));
        students.add(new Student("大根",82,172));
        students.add(new Student("傻蛋",90,168));
        students.add(new Student("富贵",80,178));
 
        System.out.println("原始数据:");
        for (Student s : students) {
            System.out.println(s.getName() + " " + s.getScore() + " " + s.getHeight());
        }
        System.out.println("按照分数升序排序:");
        students.sort(Comparator.comparing(Student::getScore));
        for (Student s : students) {
            System.out.println(s.getName() + " " + s.getScore() + " " + s.getHeight());
        }

抄个Comparator的介绍放这里:

强行对某个对象 collection 进行整体排序的比较函数。可以将 Comparator 传递给 sort 方法(如 Collections.sort 或 Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用 Comparator 来控制某些数据结构(如有序 set或有序映射)的顺序,或者为那些没有自然顺序的对象 collection 提供排序。当且仅当对于一组元素 S 中的每个e1和e2 而言,c.compare(e1, e2)==0与 e1.equals(e2) 具有相等的布尔值时,Comparator c 强行对 S 进行的排序才叫做与 equals 一致的排序。

关键字"::"来自Java8,可以通过 `::` 关键字来访问类的构造方法,对象方法,静态方法。

如果要对多个属性进行排序,继续向后添加排序规则即可。

// 先按照score的升序,然后按照height的升序
students.sort(Comparator.comparing((Student::getScore)).thenComparing(Student::getHeight).reversed());
// 先按照score的升序,然后按照height的降序
students.sort(Comparator.comparing((Student::getScore)).thenComparing(Student::getHeight).reversed().reversed());
// 先按照score的降序,然后按照height的降序
students.sort(Comparator.comparing((Student::getScore)).reversed().thenComparing(Student::getHeight).reversed().reversed());

 

posted @ 2022-06-10 11:45  石三爷  阅读(3325)  评论(1编辑  收藏  举报