Java8排序stream.sorted()的使用
在這個頁面上我們將提供java 8 Stream sorted()示例。我們可以按照自然排序以及Comparator提供的排序?qū)α鬟M(jìn)行排序。在java 8中Comparator可以使用lambda表達(dá)式進(jìn)行實(shí)例化。我們還可以反轉(zhuǎn)自然排序以及提供的排序Comparator。自然排序使用提供的順序Comparable,必須由其實(shí)例是流元素的類實(shí)現(xiàn)。在這個頁面上我們將排序List,Map并Set使用java 8流sorted()方法。
1.sorted()方法的語法示例。
1.1sorted():它使用自然順序?qū)α鞯脑剡M(jìn)行排序。元素類必須實(shí)現(xiàn)Comparable接口。
按自然升序?qū)线M(jìn)行排序
list.stream().sorted() .stream().sorted();
自然序降序使用Comparator提供reverseOrder()方法
list.stream().sorted(Comparator.reverseOrder()) .stream().sorted(Comparator.reverseOrder());
1.2 sorted(Comparator<? super T> comparator):這里我們創(chuàng)建一個Comparator使用lambda表達(dá)式的實(shí)例。我們可以按升序和降序?qū)α髟剡M(jìn)行排序。
使用Comparator來對列表進(jìn)行自定義升序。
list.stream().sorted(Comparator.comparing(Student::getAge)) .stream().sorted(Comparator.comparing(Student::getAge));
使用Comparator提供reversed()方法來對列表進(jìn)行自定義降序。 。
list.stream().sorted(Comparator.comparing(Student::getAge).reversed()) .stream().sorted(Comparator.comparing(Student::getAge).reversed());
2.使用List流排序()
package com.stream.demo;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
public class StreamListDemo {
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
list.add(new Student(1, "Mahesh", 12));
list.add(new Student(2, "Suresh", 15));
list.add(new Student(3, "Nilesh", 10));
System.out.println("---Natural Sorting by Name---");
List<Student> slist = list.stream().sorted().collect(Collectors.toList());
slist.forEach(e -> System.out.println("Id:" + e.getId() + ", Name: " + e.getName() + ", Age:" + e.getAge()));
System.out.println("---Natural Sorting by Name in reverse order---");
slist = list.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
slist.forEach(e -> System.out.println("Id:" + e.getId() + ", Name: " + e.getName() + ", Age:" + e.getAge()));
System.out.println("---Sorting using Comparator by Age---");
slist = list.stream().sorted(Comparator.comparing(Student::getAge)).collect(Collectors.toList());
slist.forEach(e -> System.out.println("Id:" + e.getId() + ", Name: " + e.getName() + ", Age:" + e.getAge()));
System.out.println("---Sorting using Comparator by Age with reverse order---");
slist = list.stream().sorted(Comparator.comparing(Student::getAge).reversed()).collect(Collectors.toList());
slist.forEach(e -> System.out.println("Id:" + e.getId() + ", Name: " + e.getName() + ", Age:" + e.getAge()));
}
}
package com.stream.demo;
public class Student implements Comparable<Student> {
private int id;
private String name;
private int age;
public Student(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public int compareTo(Student ob) {
return name.compareTo(ob.getName());
}
@Override
public boolean equals(final Object obj) {
if (obj == null) {
return false;
}
final Student std = (Student) obj;
if (this == std) {
return true;
} else {
return (this.name.equals(std.name) && (this.age == std.age));
}
}
@Override
public int hashCode() {
int hashno = 7;
hashno = 13 * hashno + (name == null ? 0 : name.hashCode());
return hashno;
}
}
執(zhí)行結(jié)果
---Natural Sorting by Name---
Id:1, Name: Mahesh, Age:12
Id:3, Name: Nilesh, Age:10
Id:2, Name: Suresh, Age:15
---Natural Sorting by Name in reverse order---
Id:2, Name: Suresh, Age:15
Id:3, Name: Nilesh, Age:10
Id:1, Name: Mahesh, Age:12
---Sorting using Comparator by Age---
Id:3, Name: Nilesh, Age:10
Id:1, Name: Mahesh, Age:12
Id:2, Name: Suresh, Age:15
---Sorting using Comparator by Age with reverse order---
Id:2, Name: Suresh, Age:15
Id:1, Name: Mahesh, Age:12
Id:3, Name: Nilesh, Age:10
3.使用set流排序
package com.stream.demo;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Set;
public class StreamSetDemo {
public static void main(String[] args) {
Set<Student> set = new HashSet<>();
set.add(new Student(1, "Mahesh", 12));
set.add(new Student(2, "Suresh", 15));
set.add(new Student(3, "Nilesh", 10));
System.out.println("---Natural Sorting by Name---");
System.out.println("---Natural Sorting by Name---");
set.stream().sorted().forEach(e -> System.out.println("Id:"
+ e.getId() + ", Name: " + e.getName() + ", Age:" + e.getAge()));
System.out.println("---Natural Sorting by Name in reverse order---");
set.stream().sorted(Comparator.reverseOrder()).forEach(e -> System.out.println("Id:"
+ e.getId() + ", Name: " + e.getName() + ", Age:" + e.getAge()));
System.out.println("---Sorting using Comparator by Age---");
set.stream().sorted(Comparator.comparing(Student::getAge))
.forEach(e -> System.out.println("Id:" + e.getId() + ", Name: " + e.getName() + ", Age:" + e.getAge()));
System.out.println("---Sorting using Comparator by Age in reverse order---");
set.stream().sorted(Comparator.comparing(Student::getAge).reversed())
.forEach(e -> System.out.println("Id:" + e.getId() + ", Name: " + e.getName() + ", Age:" + e.getAge()));
}
}
4.使用Map流排序
package com.stream.demo;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
public class StreamMapDemo {
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<>();
map.put(15, "Mahesh");
map.put(10, "Suresh");
map.put(30, "Nilesh");
System.out.println("---Sort by Map Value---");
map.entrySet().stream().sorted(Comparator.comparing(Map.Entry::getValue))
.forEach(e -> System.out.println("Key: "+ e.getKey() +", Value: "+ e.getValue()));
System.out.println("---Sort by Map Key---");System.out.println("---Sort by Map Key---");
map.entrySet().stream().sorted(Comparator.comparing(Map.Entry::getKey))
.forEach(e -> System.out.println("Key: "+ e.getKey() +", Value: "+ e.getValue()));
}
}
這是在英文網(wǎng)站看到的示例,覺得還不錯就翻譯過來了。
原文鏈接:http://www.concretepage.com/java/jdk-8/java-8-stream-sorted-example
到此這篇關(guān)于Java8排序stream.sorted()的使用的文章就介紹到這了,更多相關(guān)Java8 stream.sorted()內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java正則表達(dá)式詳解及實(shí)用案例(附詳細(xì)代碼)
正則表達(dá)式是一種強(qiáng)大的字符串處理工具,用于匹配和解析文本,這篇文章主要給大家介紹了關(guān)于Java正則表達(dá)式詳解及實(shí)用案例的相關(guān)資料,本文通過代碼示例講解了正則表達(dá)式的基本語法規(guī)則,包括字符類、預(yù)定義字符類和數(shù)量詞,需要的朋友可以參考下2024-11-11
Java實(shí)現(xiàn)Fibonacci(斐波那契)取余的示例代碼
這篇文章主要介紹了Java實(shí)現(xiàn)Fibonacci取余的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
解析java.library.path和LD_LIBRARY_PATH的介紹與區(qū)別
這篇文章主要介紹了java.library.path和LD_LIBRARY_PATH的介紹與區(qū)別,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-05-05
ExecutorService實(shí)現(xiàn)獲取線程返回值
這篇文章主要介紹了ExecutorService實(shí)現(xiàn)獲取線程返回值,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-08-08
Java?Web實(shí)戰(zhàn)之使用三層架構(gòu)與Servlet構(gòu)建登錄注冊模塊
這篇文章介紹了如何使用三層架構(gòu)(View,?Service,?DAO)和JDBCTemplate技術(shù)在JavaWeb環(huán)境下實(shí)現(xiàn)登錄和注冊功能,詳細(xì)說明了構(gòu)建項(xiàng)目的步驟,包括創(chuàng)建數(shù)據(jù)庫表、實(shí)體類、DAO層、Service層、Servlet處理及頁面設(shè)計(jì),需要的朋友可以參考下2024-10-10

