网易首页 > 网易号 > 正文 申请入驻

【289期】Java 8 新特性:Comparator.naturalOrder | 自然排序

0
分享至

点击上方“Java精选”,选择“设为星标”

别问别人为什么,多问自己凭什么!

下方有惊喜,留言必回,有问必答!

每一天进步一点点,是成功的开始...

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返回一个由这个流的元素组成的流,根据提供的比较器进行排序。

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(12, 10, 15, 8, 11);
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 {
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根据给定的比较器实例对指定的列表进行排序。

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(12, 10, 15, 8, 11);
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根据给定的比较器实例对这个列表进行排序。

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(12, 10, 15, 8, 11);
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根据指定的比较器引起的顺序对指定的对象阵列进行排序。

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() + " ");
}
}
}

作者:猫巳 https://moonce.blog.csdn.net/article/details/120324130

公众号“Java精选”所发表内容注明来源的,版权归原出处所有(无法查证版权的或者未注明出处的均来自网络,系转载,转载的目的在于传递更多信息,版权属于原作者。如有侵权,请联系,笔者会第一时间删除处理!

------ THE END ------

精品资料,超赞福利!


3000+ 道面试题在线刷,最新、最全 Java 面试题!

期往精选 点击标题可跳转

技术交流群!

最近有很多人问,有没有读者交流群!想知道如何加入?方式很简单,兴趣相投的朋友,只需要点击下方卡片,回复“加群”,即可无套路入交流群!

文章有帮助的话,在看,转发吧!

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
香港再无董建华

香港再无董建华

华人星光
2025-11-25 12:01:27
《生活大爆炸》男星自曝:一直活在恐惧中

《生活大爆炸》男星自曝:一直活在恐惧中

时光慢旅人
2026-05-30 00:33:10
“说着说着,他的手就趁你不注意,他手就捞过来,就很熟练。”武汉女子称报案维权反遭猥亵,多次向相关部门举报、报警

“说着说着,他的手就趁你不注意,他手就捞过来,就很熟练。”武汉女子称报案维权反遭猥亵,多次向相关部门举报、报警

都市快报橙柿互动
2026-05-30 08:18:51
博主称泸沽湖景区在省道违法“设卡收费”,较真就会被放行;当地交通部门:已获收费手续,路过扫码即可通行

博主称泸沽湖景区在省道违法“设卡收费”,较真就会被放行;当地交通部门:已获收费手续,路过扫码即可通行

大风新闻
2026-05-28 19:20:06
《主角》大结局!忆秦娥痛失所爱,胡三元圆满,唯独楚嘉禾意难平

《主角》大结局!忆秦娥痛失所爱,胡三元圆满,唯独楚嘉禾意难平

乡野小珥
2026-05-30 19:31:51
美女飞行员突破“12G”的瓜

美女飞行员突破“12G”的瓜

吃瓜体
2026-05-25 16:16:43
张雪:我不要几十亿订单,宁德时代给我单独调配方,这才是真野心

张雪:我不要几十亿订单,宁德时代给我单独调配方,这才是真野心

童叔不飙车
2026-05-30 21:49:14
Gayle King自曝择偶怪癖:男人够大够幽默,内裤会自己掉?

Gayle King自曝择偶怪癖:男人够大够幽默,内裤会自己掉?

赴一场山海啊
2026-05-30 01:19:50
女子曝光公路上晒粮食,仅留中间小道通过,河南网友被骂惨了!

女子曝光公路上晒粮食,仅留中间小道通过,河南网友被骂惨了!

谭谈社会
2026-05-30 16:49:46
一月八万不够花,李双江“赖”学校不退休,儿子改名出国后再作妖

一月八万不够花,李双江“赖”学校不退休,儿子改名出国后再作妖

一盅情怀
2026-05-16 20:12:47
俄专家一针见血:中国若要对日本动手,中国只有两个选择!

俄专家一针见血:中国若要对日本动手,中国只有两个选择!

色彩斑斓的世界
2026-05-02 05:46:28
南开大学通报论文数据存疑问题

南开大学通报论文数据存疑问题

界面新闻
2026-05-30 19:44:53
我定居日本20年,娶过3个妻子,发现日本的女人都有一个共同特点

我定居日本20年,娶过3个妻子,发现日本的女人都有一个共同特点

千秋文化
2026-05-20 20:33:05
发现一个现象:中产返贫三件套,已经升级为六件套了!

发现一个现象:中产返贫三件套,已经升级为六件套了!

番外行
2026-05-18 10:25:35
马斯克随手发了条中国视频,6小时,就把3000万老外看呆了

马斯克随手发了条中国视频,6小时,就把3000万老外看呆了

背包旅行
2026-05-30 10:01:15
一夜炸锅!CBA总决赛场外三桩事,比绝杀还抢镜

一夜炸锅!CBA总决赛场外三桩事,比绝杀还抢镜

林子说事
2026-05-30 20:14:30
“丑的不能再丑了!”女子吐槽中学女生流行发型,比鲶鱼须还恶心

“丑的不能再丑了!”女子吐槽中学女生流行发型,比鲶鱼须还恶心

林林先生
2026-05-30 08:20:03
驾驶新规来了!6月1日起全国执行,抓到就罚...

驾驶新规来了!6月1日起全国执行,抓到就罚...

深圳好玩
2026-05-30 10:11:56
向太再曝猛料:李连杰黄秋燕离婚根本不是因为利智!而是另有缘由

向太再曝猛料:李连杰黄秋燕离婚根本不是因为利智!而是另有缘由

阿废冷眼观察所
2026-05-11 00:16:02
法网冷门夜!2大前八种子出局 卫冕冠军被逆转 中国金花独苗冲8强

法网冷门夜!2大前八种子出局 卫冕冠军被逆转 中国金花独苗冲8强

侃球熊弟
2026-05-31 02:30:28
2026-05-31 09:19:00
Java精选
Java精选
一场永远也演不完的戏
1791文章数 3859关注度
往期回顾 全部

科技要闻

车圈大佬发声:价格战远去,但竞争仍残酷

头条要闻

房主将住宅变"网约房"挂到网上接受预订 邻居不满起诉

头条要闻

房主将住宅变"网约房"挂到网上接受预订 邻居不满起诉

体育要闻

巴黎再度捧起欧冠奖杯 枪手众将黯然神伤

娱乐要闻

张碧晨《歌手》 “活人微死” 自嘲

财经要闻

双汇管不住一头猪

汽车要闻

900V+3.2秒破百 领克10+&领克10上市16.99万元起

态度原创

教育
房产
手机
时尚
数码

教育要闻

氧化还原反应方程式的配平

房产要闻

红动五月!全国抢入核心资产,广州盯紧凯旋新世界!

手机要闻

安卓17适配计划公布!谷歌Pixel首发尝鲜 国产手机也能升

伊姐周六热推:电视剧《樊笼》;电视剧《翘楚》......

数码要闻

vivo S60系列发布:2899元起 推出4K原生感Live

无障碍浏览 进入关怀版