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());