Java中Stream流對(duì)多個(gè)字段進(jìn)行排序的方法
前言
談起Java 8,不少熟悉它的人,都會(huì)知道有一個(gè)對(duì)我們幫助很大的新特性,沒(méi)錯(cuò),就是我們?cè)陧?xiàng)目中經(jīng)常用到的stream,它對(duì)我們處理數(shù)據(jù)的過(guò)程中提供了很多的便利,而這邊文章主要講述stream的便利之一:對(duì)多個(gè)字段進(jìn)行排序
1、首先我們?cè)跀?shù)據(jù)庫(kù)中插入幾條樣例數(shù)據(jù)
要求:按照nick_name、address、age順序進(jìn)行排序
2、我們先用sql查詢的方式對(duì)數(shù)據(jù)進(jìn)行排序
3、通過(guò)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": "超級(jí)管理員",
"password": "123456",
"address": "武漢",
"phone": "15172378154",
"sex": 1,
"age": 30,
"createTime": "2023-05-08 11:45:31"
}
]
通過(guò)代碼我們可以知道通過(guò)stream的sorted()方法就可實(shí)現(xiàn)我們想要的結(jié)果,原理還是利用Comparator比較器對(duì)要排序的字段進(jìn)行比較,如果想倒序,則在比較器后面加上reversed(),該方法是對(duì)排序后的數(shù)據(jù)進(jìn)行一個(gè)反轉(zhuǎn)。
小結(jié):雖然對(duì)多個(gè)字段進(jìn)行排序有時(shí)候通過(guò)sql語(yǔ)句就能實(shí)現(xiàn),但有時(shí)候一些特殊場(chǎng)景導(dǎo)致不能使用sql排序的時(shí)候,stream就能派上用場(chǎng)了
總結(jié)
到此這篇關(guān)于Java中Stream流對(duì)多個(gè)字段進(jìn)行排序的文章就介紹到這了,更多相關(guān)Java Stream流多字段排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何通過(guò)XML方式配置并實(shí)現(xiàn)Mybatis
這篇文章主要介紹了如何通過(guò)XML方式配置并實(shí)現(xiàn)Mybatis,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11Java?awt-對(duì)話框簡(jiǎn)單實(shí)現(xiàn)方式
這篇文章主要介紹了Java?awt-對(duì)話框簡(jiǎn)單實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12關(guān)于SpringBoot攔截器攔截靜態(tài)資源的問(wèn)題
這篇文章主要介紹了關(guān)于SpringBoot攔截器攔截靜態(tài)資源的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07Java中重寫(xiě)和重載的區(qū)別及說(shuō)明
Java語(yǔ)言中的重載和重寫(xiě)是實(shí)現(xiàn)多態(tài)的兩種方式,但他們的實(shí)現(xiàn)方式和規(guī)則有所不同,重載發(fā)生在一個(gè)類(lèi)中,同名的方法如果有不同的參數(shù)列表,則視為重載,重寫(xiě)則發(fā)生在子類(lèi)和父類(lèi)之間,要求子類(lèi)重寫(xiě)方法和父類(lèi)被重寫(xiě)方法有相同的返回類(lèi)型2024-10-10Java前后端的JSON傳輸方式(前后端JSON格式轉(zhuǎn)換)
這篇文章主要介紹了Java前后端的JSON傳輸方式(前后端JSON格式轉(zhuǎn)換),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04