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

【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.

相关推荐
热点推荐
刚刚,空军一号上放出猛料!特朗普亲口承认:这次访华非常棒

刚刚,空军一号上放出猛料!特朗普亲口承认:这次访华非常棒

菁菁子衿
2026-05-16 16:37:36
网上传出一段相亲经历,让不少人看得目瞪口呆,上午才认识,

网上传出一段相亲经历,让不少人看得目瞪口呆,上午才认识,

网络易不易
2026-05-16 15:22:41
52岁西班牙籍主帅神了:率中国男足4-2大胜韩国,3连胜斩获冠军

52岁西班牙籍主帅神了:率中国男足4-2大胜韩国,3连胜斩获冠军

侧身凌空斩
2026-05-16 15:57:50
大疆、影石的“师父”,撑不下去了

大疆、影石的“师父”,撑不下去了

中国新闻周刊
2026-05-16 19:03:09
泰国主帅:我已经分析了中国队的数据;球员们要展现出求胜欲

泰国主帅:我已经分析了中国队的数据;球员们要展现出求胜欲

懂球帝
2026-05-16 18:08:22
特朗普刚离京,发表两条涉台重磅言论!

特朗普刚离京,发表两条涉台重磅言论!

大国之翼
2026-05-16 06:49:13
多名中国男子赴泰国后集体失联!家属曾接到来电,称“人很安全,已在当地找到工作,无需担心”,但全程声音哽咽、情绪压抑

多名中国男子赴泰国后集体失联!家属曾接到来电,称“人很安全,已在当地找到工作,无需担心”,但全程声音哽咽、情绪压抑

新民晚报
2026-05-16 20:30:24
马克龙没想到,特朗普访华刚落地,巩俐就在法国引起了“中国潮”

马克龙没想到,特朗普访华刚落地,巩俐就在法国引起了“中国潮”

阿伧说事
2026-05-15 19:47:18
体检报告中,若3个指标都正常,基本可以排除很多疾病

体检报告中,若3个指标都正常,基本可以排除很多疾病

芹姐说生活
2026-05-08 19:06:29
库里躺枪!格林:某些人都7000万美元!詹姆斯4000万不过分!

库里躺枪!格林:某些人都7000万美元!詹姆斯4000万不过分!

历史第一人梅西
2026-05-16 18:45:34
必须奖励!深圳小伙觉得飞机不太对劲拍照反馈,排查发现真有故障

必须奖励!深圳小伙觉得飞机不太对劲拍照反馈,排查发现真有故障

观世记
2026-05-16 15:06:12
张雪峰猝死不到2月,小沈阳被紧急送往就医,已是10天内第二次

张雪峰猝死不到2月,小沈阳被紧急送往就医,已是10天内第二次

她时尚丫
2026-05-15 21:40:35
张嘉益拍戏有个铁规矩,合同条款都好商量,唯独一条不能改,剧组得给孙浩安排个角色

张嘉益拍戏有个铁规矩,合同条款都好商量,唯独一条不能改,剧组得给孙浩安排个角色

可爱小菜
2026-05-15 15:39:11
特朗普团队丢弃全部中国赠品:美中“零信任”外交的生动表现

特朗普团队丢弃全部中国赠品:美中“零信任”外交的生动表现

小雨亭
2026-05-16 17:36:06
三年不报警不公开,支付宝究竟在害怕什么?

三年不报警不公开,支付宝究竟在害怕什么?

听心堂
2026-05-15 12:20:38
王琛不幸离世,年仅26岁!从确诊到离世仅11天

王琛不幸离世,年仅26岁!从确诊到离世仅11天

环球网资讯
2026-05-16 08:53:24
科尔曼告别埃弗顿:17年传奇落幕,6万英镑造就的队魂

科尔曼告别埃弗顿:17年传奇落幕,6万英镑造就的队魂

赛场速报局
2026-05-17 01:30:31
后院被路灯包围,这台望远镜却拍到了2100光年外的星云

后院被路灯包围,这台望远镜却拍到了2100光年外的星云

像素与芯片
2026-05-16 00:36:59
巴萨官方致谢莱万:你如星辰降临,如传奇离去,谢谢你

巴萨官方致谢莱万:你如星辰降临,如传奇离去,谢谢你

懂球帝
2026-05-16 19:32:12
我卧底边境六年终于回家,饭桌上父亲用摩斯密码敲击桌子:赶快跑

我卧底边境六年终于回家,饭桌上父亲用摩斯密码敲击桌子:赶快跑

千秋文化
2026-05-14 20:24:09
2026-05-17 01:55:00
Java精选
Java精选
一场永远也演不完的戏
1789文章数 3859关注度
往期回顾 全部

科技要闻

涨的是车价,要的是老命

头条要闻

又想“抹黑”中国 福克斯新闻“翻车”了

头条要闻

又想“抹黑”中国 福克斯新闻“翻车”了

体育要闻

马刺2号,少年老成,这集看过?

娱乐要闻

谢霆锋北京街头骑行被偶遇,侧颜帅炸

财经要闻

造词狂魔贾跃亭

汽车要闻

大五座SUV卷王!乐道L80上市 租电15.68万元起

态度原创

家居
数码
房产
健康
游戏

家居要闻

110㎡淡而有致的生活表达

数码要闻

科技巨头访华遇618 苹果、高通、英伟达集中促销中

房产要闻

老黄埔热销之下,珠江春,为何去化仅3成?

专家揭秘干细胞回输的安全风险

曝索尼大量神作真有计划复活!PS日系经典IP已在路上

无障碍浏览 进入关怀版