Java中Stream流對多個(gè)字段進(jìn)行排序的方法
前言
談起Java 8,不少熟悉它的人,都會(huì)知道有一個(gè)對我們幫助很大的新特性,沒錯(cuò),就是我們在項(xiàng)目中經(jīng)常用到的stream,它對我們處理數(shù)據(jù)的過程中提供了很多的便利,而這邊文章主要講述stream的便利之一:對多個(gè)字段進(jìn)行排序
1、首先我們在數(shù)據(jù)庫中插入幾條樣例數(shù)據(jù)
要求:按照nick_name、address、age順序進(jìn)行排序

2、我們先用sql查詢的方式對數(shù)據(jù)進(jìn)行排序

3、通過stream流的方式進(jìn)行排序
代碼實(shí)現(xiàn):
public Object selectList() {
List<User> userList = userMapper.selectList(new QueryWrapper<>());
Comparator<User>comparator =Comparator.comparing(User::getNickName)
.thenComparing(User::getAddress)
.thenComparing(User::getAge);
userList = userList.stream().sorted(comparator).collect(Collectors.toList());
return userList;
}
結(jié)果展示:
[
{
"id": 2,
"userName": "zhangsan",
"nickName": "張三",
"password": "123456",
"address": "武漢",
"phone": "18178523659",
"sex": 1,
"age": 42,
"createTime": "2023-07-15 13:30:52"
},
{
"id": 3,
"userName": "zhangsan102",
"nickName": "張三",
"password": "123456",
"address": "武漢",
"phone": "15236985214",
"sex": 1,
"age": 57,
"createTime": "2023-07-15 13:31:27"
},
{
"id": 4,
"userName": "zhangshan103",
"nickName": "張三",
"password": "123456",
"address": "西安",
"phone": "18956235841",
"sex": 1,
"age": 36,
"createTime": "2023-07-15 13:32:28"
},
{
"id": 1,
"userName": "admin",
"nickName": "超級管理員",
"password": "123456",
"address": "武漢",
"phone": "15172378154",
"sex": 1,
"age": 30,
"createTime": "2023-05-08 11:45:31"
}
]
通過代碼我們可以知道通過stream的sorted()方法就可實(shí)現(xiàn)我們想要的結(jié)果,原理還是利用Comparator比較器對要排序的字段進(jìn)行比較,如果想倒序,則在比較器后面加上reversed(),該方法是對排序后的數(shù)據(jù)進(jìn)行一個(gè)反轉(zhuǎn)。
小結(jié):雖然對多個(gè)字段進(jìn)行排序有時(shí)候通過sql語句就能實(shí)現(xiàn),但有時(shí)候一些特殊場景導(dǎo)致不能使用sql排序的時(shí)候,stream就能派上用場了
總結(jié)
到此這篇關(guān)于Java中Stream流對多個(gè)字段進(jìn)行排序的文章就介紹到這了,更多相關(guān)Java Stream流多字段排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java 圖片驗(yàn)證碼的實(shí)現(xiàn)代碼
java 圖片驗(yàn)證碼的實(shí)現(xiàn)代碼,需要的朋友可以參考一下2013-05-05
SpringBoot解決Required?String?parameter?xxx?is?not?prese
這篇文章主要介紹了SpringBoot解決Required?String?parameter?xxx?is?not?present問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
Java集成Redis構(gòu)建企業(yè)級的高可用分布式緩存系統(tǒng)
在當(dāng)今的互聯(lián)網(wǎng)應(yīng)用中,隨著用戶量和數(shù)據(jù)量的快速增長,系統(tǒng)性能和可用性面臨著巨大挑戰(zhàn),本文將深入探討如何在Java應(yīng)用中集成Redis,構(gòu)建企業(yè)級的分布式緩存解決方案,有需要的小伙伴可以了解下2025-09-09
jmeter添加自定義擴(kuò)展函數(shù)之圖片base64編碼示例詳解
這篇文章主要介紹了jmeter添加自定義擴(kuò)展函數(shù)之圖片base64編碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01
java 實(shí)現(xiàn)最小二叉樹堆排序的實(shí)例
這篇文章主要介紹了java 實(shí)現(xiàn)最小二叉樹堆排序的實(shí)例的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-09-09
Java實(shí)現(xiàn)布隆過濾器的幾種方式總結(jié)
這篇文章給大家總結(jié)了幾種Java實(shí)現(xiàn)布隆過濾器的方式,手動(dòng)硬編碼實(shí)現(xiàn),引入Guava實(shí)現(xiàn),引入hutool實(shí)現(xiàn),通過redis實(shí)現(xiàn)等幾種方式,文中有詳細(xì)的代碼和圖解,需要的朋友可以參考下2023-07-07

