在Java 8中,List接口支持使用sort方法排序

  1. listDevs.sort(new Comparator<Developer>() {
  2. @Override
  3. public int compare(Developer o1, Developer o2) {
  4. return o2.getAge() - o1.getAge();
  5. }
  6. });

由此,可以引申出一系列的排序方法

一. 使用Lambada表达式实现Comparator接口

  1. listDevs.sort(new Comparator<Developer>() {
  2. @Override
  3. public int compare(Developer o1, Developer o2) {
  4. return o2.getAge() - o1.getAge();
  5. }
  6. });

用Lambada精简后为

  1. list.sort((Developer o1, Developer o2)->o1.getAge()-o2.getAge());

二. 使用Comparator接口下的方法排序

按照List中对象的id属性升序

  1. list.sort(Comparator.comparing(Stu::getId))

按照List中对象的id属性降序

  1. list.sort(Comparator.comparing(Stu::getId).reversed());

多条件升序

  1. list.sort(Comparator.comparing(Stu::getId).thenComparing(Stu::getSid));

id升序,sid降序

  1. list.sort(Comparator.comparing(Stu::getId).reversed().thenComparing(Stu::getSid));

三. 使用Collections.sort()方法排序(不推荐)

Collections是集合的工具类通常提供一系列操控集合的方法

  • void reverse(List list):反转
  • void shuffle(List list):随机排序
  • void sort(List list):按自然排序的升序排序
  • void sort(List list, Comparator c):定制排序,由Comparator控制排序逻辑
  • void swap(List list, int i , int j):交换两个索引位置的元素
  • void rotate(List list, int distance):旋转。当distance为正数时,将list后distance个元素整体移到前面。当distance为负数时,将 list的前distance个元素整体移到后面。

可以利用Collections的sort方法对集合进行排序

  1. Collections.sort(student, new Comparator(){
  2. public int compare(StudentVo p1, StudentVo p2) {
  3. return Integer.parseInt(p1.getAge()) - Integer.parseInt(p2.getAge());
  4. }
  5. });

利用Lambada简化后为,感觉相比第一种方法,多此一举了已经

  1. Collections.sort(listDevs, comparingInt(Student::getAge));