【Java 8 新特性】Java Comparator.reversed | 倒序排序 - 默认方法

reversedJava比较器功能接口的默认方法。

这个方法是在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.sortedList.sortCollections.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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫巳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值