Java Comparator.reversed | 倒序排序 - 默认方法
reversed
是Java
比较器功能接口的默认方法。
这个方法是在Java 8
中引入的。
reversed
返回一个比较器,这个比较器的排序是反向的。
它被声明如下。
default Comparator<T> reversed()
要使用reversed
方法,我们需要实例化我们的比较器并调用该方法。
reversed
将返回新的比较器实例,该实例将强加该比较器的反向排序。
Comparator<Student> nameComparator = (s1, s2) -> s1.getName().compareTo(s2.getName());
Collections.sort(list, nameComparator.reversed());
比较器实例可以作为Stream.sorted
、List.sort
和Collections.sort
中的参数传递,以便对元素进行排序。
现在让我们来逐步讨论使用Comparator.reversed
。
在 Stream.sorted 中使用
Stream.Sorted
返回由该流的元素组成的流,根据所提供的比较器进行排序。
StreamSortedDemo.java
import java.util.Comparator;
import java.util.List;
public class StreamSortedDemo {
public static void main(String[] args) {
List<Student> list = Student.getStudentList();
Comparator<Student> ageComparator = (s1, s2) -> s1.getAge() - s2.getAge();
list.stream().sorted(ageComparator.reversed()).forEach(s -> System.out.print(s.getAge() + " "));
System.out.println("\n-----------");
Comparator<Student> nameComparator = (s1, s2) -> s1.getName().compareTo(s2.getName());
list.stream().sorted(nameComparator.reversed()).forEach(s -> System.out.print(s.getName() + " "));
System.out.println("\n-----------");
list.stream().sorted(Comparator.comparing(Student::getAge).reversed()).forEach(s -> System.out.print(s.getAge() + " "));
System.out.println("\n-----------");
list.stream().sorted(Comparator.comparing(Student::getName).reversed()).forEach(s -> System.out.print(s.getName() + " "));
}
}
Student.java
import java.util.Arrays;
import java.util.List;
public class Student {
private String name;
private int age;
public Student(String name,int age){
this.name=name;
this.age=age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public static List<Student> getStudentList(){
Student s1 = new Student("Ram", 18);
Student s2 = new Student("Shyam",22);
Student s3 = new Student("Mohan",19);
Student s4 = new Student("Mahesh",20);
Student s5 = new Student("Krishna",21);
List<Student> list = Arrays.asList(s1,s2,s3,s4,s5);
return list;
}
}
输出
22 21 20 19 18
-----------
Shyam Ram Mohan Mahesh Krishna
-----------
22 21 20 19 18
-----------
Shyam Ram Mohan Mahesh Krishna
在 List.sort 中使用
List.sort
根据给定的比较器实例对这个列表进行排序。
ListSortDemo.java
import java.util.Comparator;
import java.util.List;
public class ListSortDemo {
public static void main(String[] args) {
List<Student> list = Student.getStudentList();
Comparator<Student> ageComparator = (s1, s2) -> s1.getAge() - s2.getAge();
list.sort(ageComparator.reversed());
list.forEach(s -> System.out.print(s.getAge() + " "));
System.out.println("\n-----------");
Comparator<Student> nameComparator = (s1, s2) -> s1.getName().compareTo(s2.getName());
list.sort(nameComparator.reversed());
list.forEach(s -> System.out.print(s.getName() + " "));
System.out.println("\n-----------");
list.sort(Comparator.comparing(Student::getAge).reversed());
list.forEach(s -> System.out.print(s.getAge() + " "));
System.out.println("\n-----------");
list.sort(Comparator.comparing(Student::getName).reversed());
list.forEach(s -> System.out.print(s.getName() + " "));
}
}
在 Collections.sort 中使用
Collections.sort
根据给定的比较器实例对指定的列表进行排序。
CollectionsSortDemo.java
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class CollectionsSortDemo {
public static void main(String[] args) {
List<Student> list = Student.getStudentList();
Comparator<Student> ageComparator = (s1, s2) -> s1.getAge() - s2.getAge();
Collections.sort(list, ageComparator.reversed());
list.forEach(s -> System.out.print(s.getAge() + " "));
System.out.println("\n-----------");
Comparator<Student> nameComparator = (s1, s2) -> s1.getName().compareTo(s2.getName());
Collections.sort(list, nameComparator.reversed());
list.forEach(s -> System.out.print(s.getName() + " "));
System.out.println("\n-----------");
Collections.sort(list, Comparator.comparing(Student::getAge).reversed());
list.forEach(s -> System.out.print(s.getAge() + " "));
System.out.println("\n-----------");
Collections.sort(list, Comparator.comparing(Student::getName).reversed());
list.forEach(s -> System.out.print(s.getName() + " "));
}
}
参考文献
【1】Interface Comparator
【2】Java 8 Stream sorted() Example
【3】Java Comparator.reversed