Java 8 新特性:Comparator.naturalOrder | 自然排序
點(diǎn)擊關(guān)注公眾號,實(shí)用技術(shù)文章及時(shí)了解
來源:moonce.blog.csdn.net/article/
details/120324130
naturalOrder是比較器功能接口的靜態(tài)方法。
Java 8中引入的Comparator.naturalOrder方法返回一個(gè)比較器,該比較器以自然順序比較可比較對象。
對于自然排序,一個(gè)類需要實(shí)現(xiàn)Comparable并定義compareTo方法。
一個(gè)對象的集合根據(jù)compareTo方法以自然排序進(jìn)行排序。
像Integer、String和Date這樣的Java類實(shí)現(xiàn)了Comparable接口并覆蓋了其compareTo方法,它們以詞表順序(lexicographic-order)進(jìn)行排序。
從Java源代碼中找到naturalOrder方法聲明。
static?super?T>>?Comparator?naturalOrder()?
為了扭轉(zhuǎn)自然排序,我們可以使用Comparator.reverseOrder方法。
在本頁面中,我們將提供一些例子,說明如何使用Comparator.naturalOrder與Stream.sorted、Collections.sort、List.sort和Arrays.sort一起對對象的集合進(jìn)行自然排序。
與 Stream.sorted 一起使用
Stream.sorted返回一個(gè)由這個(gè)流的元素組成的流,根據(jù)提供的比較器進(jìn)行排序。
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<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根據(jù)給定的比較器實(shí)例對指定的列表進(jìn)行排序。
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 一起使用
List.sort根據(jù)給定的比較器實(shí)例對這個(gè)列表進(jìn)行排序。
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 一起使用
Arrays.sort根據(jù)指定的比較器引起的順序?qū)χ付ǖ膶ο箨嚵羞M(jìn)行排序。
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個(gè)私活都在這里,經(jīng)驗(yàn)整理
Java項(xiàng)目分享 ?最新整理全集,找項(xiàng)目不累啦 07版
堪稱神級的Spring Boot手冊,從基礎(chǔ)入門到實(shí)戰(zhàn)進(jìn)階
臥槽!字節(jié)跳動《算法中文手冊》火了,完整版 PDF 開放下載!
臥槽!阿里大佬總結(jié)的《圖解Java》火了,完整版PDF開放下載!
字節(jié)跳動總結(jié)的設(shè)計(jì)模式 PDF 火了,完整版開放下載!
歡迎添加程序汪個(gè)人微信 itwang009? 進(jìn)粉絲群或圍觀朋友圈
