Java 8 新特性:Comparator.naturalOrder | 自然排序

我是程序汪

共 363字,需浏览 1分钟

 ·

2022-04-24 19:58

点击关注公众号,实用技术文章及时了解

来源:moonce.blog.csdn.net/article/

details/120324130

naturalOrder是比较器功能接口的静态方法。

Java 8中引入的Comparator.naturalOrder方法返回一个比较器,该比较器以自然顺序比较可比较对象。

对于自然排序,一个类需要实现Comparable并定义compareTo方法。

一个对象的集合根据compareTo方法以自然排序进行排序。

像Integer、String和Date这样的Java类实现了Comparable接口并覆盖了其compareTo方法,它们以词表顺序(lexicographic-order)进行排序。

从Java源代码中找到naturalOrder方法声明。

static super T>> Comparator naturalOrder() 

为了扭转自然排序,我们可以使用Comparator.reverseOrder方法。

在本页面中,我们将提供一些例子,说明如何使用Comparator.naturalOrderStream.sorted、Collections.sort、List.sortArrays.sort一起对对象的集合进行自然排序。

与 Stream.sorted 一起使用

Stream.sorted返回一个由这个流的元素组成的流,根据提供的比较器进行排序。

StreamSortedDemo.java

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
public class StreamSortedDemo {
  public static void main(String[] args) {
 List numList = Arrays.asList(121015811);
 numList.stream().sorted(Comparator.naturalOrder()).forEach(n -> System.out.print(n + " "));
 System.out.println("\n-----------");
 
 List strList = Arrays.asList("Varanasi""Allahabad""Kanpur""Noida");
 strList.stream().sorted(Comparator.naturalOrder()).forEach(s -> System.out.print(s + " "));
 System.out.println("\n-----------"); 
 
 List stdList = Student.getStudentList();
 stdList.stream().sorted(Comparator.naturalOrder()).forEach(s -> System.out.print(s.getName() + " "));
 System.out.println("\n-----------"); 
 
 //reverse order of natural order using Comparator.reverseOrder()
 stdList = Student.getStudentList();
 stdList.stream().sorted(Comparator.reverseOrder()).forEach(s -> System.out.print(s.getName() + " ")); 
  }

Student.java

import java.util.Arrays;
import java.util.List;
public class Student implements Comparable<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;
  }
  @Override
  public int compareTo(Student s) {
 return name.compareTo(s.getName());
  }
  public static List 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 list = Arrays.asList(s1, s2, s3, s4, s5);
 return list;
  }

输出

8 10 11 12 15 
-----------
Allahabad Kanpur Noida Varanasi 
-----------
Krishna Mahesh Mohan Ram Shyam 
-----------
Shyam Ram Mohan Mahesh Krish 

与 Collections.sort 一起使用

Collections.sort根据给定的比较器实例对指定的列表进行排序。

CollectionsSortDemo.java

import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class CollectionsSortDemo {
  public static void main(String[] args) {
 List numList = Arrays.asList(121015811);
 Collections.sort(numList, Comparator.naturalOrder());
 numList.forEach(n -> System.out.print(n + " "));
 System.out.println("\n-----------");
 
 List strList = Arrays.asList("Varanasi""Allahabad""Kanpur""Noida");
 Collections.sort(strList, Comparator.naturalOrder());
 strList.forEach(s -> System.out.print(s + " "));
 System.out.println("\n-----------"); 
 
 List stdList = Student.getStudentList();
 Collections.sort(stdList, Comparator.naturalOrder());
 stdList.forEach(s -> System.out.print(s.getName() + " ")); 
  }

与 List.sort 一起使用

List.sort根据给定的比较器实例对这个列表进行排序。

ListSortDemo.java

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
public class ListSortDemo {
  public static void main(String[] args) {
 List numList = Arrays.asList(121015811);
 numList.sort(Comparator.naturalOrder());
 numList.forEach(n -> System.out.print(n + " "));
 System.out.println("\n-----------");
 
 List strList = Arrays.asList("Varanasi""Allahabad""Kanpur""Noida");
 strList.sort(Comparator.naturalOrder());
 strList.forEach(s -> System.out.print(s + " "));
 System.out.println("\n-----------"); 
 
 List stdList = Student.getStudentList();
 stdList.sort(Comparator.naturalOrder());
 stdList.forEach(s -> System.out.print(s.getName() + " "));
  }

与 Arrays.sort 一起使用

Arrays.sort根据指定的比较器引起的顺序对指定的对象阵列进行排序。

ArraysSortDemo.java

import java.util.Arrays;
import java.util.Comparator;
public class ArraysSortDemo {
  public static void main(String[] args) {
 Student s1 = new Student("Ram"18);
 Student s2 = new Student("Shyam"22);
 Student s3 = new Student("Mohan"19);

 Student[] stdArray = { s1, s2, s3 };
 Arrays.sort(stdArray, Comparator.naturalOrder());
 for (Student s : stdArray) {
   System.out.print(s.getName() + " ");
 }
  }



程序汪资料链接

程序汪接的7个私活都在这里,经验整理

Java项目分享  最新整理全集,找项目不累啦 07版

堪称神级的Spring Boot手册,从基础入门到实战进阶

卧槽!字节跳动《算法中文手册》火了,完整版 PDF 开放下载!

卧槽!阿里大佬总结的《图解Java》火了,完整版PDF开放下载!

字节跳动总结的设计模式 PDF 火了,完整版开放下载!


欢迎添加程序汪个人微信 itwang009  进粉丝群或围观朋友圈

浏览 18
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报