最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用stream流多字段排序SpringBoot

 更新時(shí)間:2025年11月25日 16:46:19   作者:shy好好學(xué)習(xí)  
文章介紹了在Java8中使用stream流對(duì)對(duì)象的多個(gè)字段進(jìn)行排序的方法,首先準(zhǔn)備數(shù)據(jù),然后演示了單個(gè)字段和多個(gè)字段的排序操作,包括升序和降序,文章最后總結(jié)了單個(gè)字段排序和多個(gè)字段排序的區(qū)別,并鼓勵(lì)讀者參考和分享

前言

在開(kāi)發(fā)過(guò)程中我們經(jīng)常會(huì)遇到根據(jù)對(duì)象中不同字段的值進(jìn)行排序,也就是我們常說(shuō)的多字段排序。

在Java8中我們可以使用stream流很便捷的進(jìn)行排序。

下面我將以年齡和班級(jí)兩個(gè)字段的值來(lái)演示使用stream流進(jìn)行多字段排序的操作。

數(shù)據(jù)準(zhǔn)備

public class User {

    //學(xué)生id
    private Integer userId;

    //學(xué)生姓名
    private String userName;

    //學(xué)生年齡
    private Integer age;

    //學(xué)生班級(jí)
    private Integer classNo;
}

List<User> userList = new ArrayList<>();
userList.add(new User(1, "shy01", 20, 1));
userList.add(new User(2, "shy02", 18, 3));
userList.add(new User(3, "shy03", 20, 4));
userList.add(new User(4, "shy04", 19, 2));
userList.add(new User(5, "shy05", 17, 5));
userList.add(new User(6, "shy06", 16, 4));
userList.add(new User(7, "shy07", 18, 9));
userList.add(new User(8, "shy08", 19, 8));
userList.add(new User(9, "shy09", 21, 7));

字段排序

1、單個(gè)字段排序

1.1根據(jù)年齡升序排序

userList = userList.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList());
userList.forEach(System.out::println);

1.2根據(jù)年齡降序排序

//方法1:先對(duì)年齡進(jìn)行升序,結(jié)果進(jìn)行反轉(zhuǎn)
userList = userList.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(Collectors.toList());
//方法2:直接對(duì)年齡進(jìn)行降序
userList = userList.stream().sorted(Comparator.comparing(User::getAge, Comparator.reverseOrder())).collect(Collectors.toList());
userList.forEach(System.out::println);

2、多個(gè)字段排序

2.1年齡升序,班級(jí)升序

userList = userList.stream().sorted(Comparator.comparing(User::getAge).thenComparing(User::getClassNo)).collect(Collectors.toList());

2.2年齡降序,班級(jí)升序

//方法1:先對(duì)年齡進(jìn)行升序,升序結(jié)果進(jìn)行反轉(zhuǎn),再進(jìn)行班級(jí)升序
userList = userList.stream().sorted(Comparator.comparing(User::getAge).reversed().thenComparing(User::getClassNo)).collect(Collectors.toList());
//方法2:直接對(duì)年齡進(jìn)行降序,再對(duì)班級(jí)進(jìn)行升序
userList = userList.stream().sorted(Comparator.comparing(User::getAge, Comparator.reverseOrder()).thenComparing(User::getClassNo)).collect(Collectors.toList());

2.3年齡降序,班級(jí)降序

//方法1:先對(duì)年齡進(jìn)行升序,升序結(jié)果進(jìn)行反轉(zhuǎn),再對(duì)班級(jí)進(jìn)行降序
userList = userList.stream().sorted(Comparator.comparing(User::getAge).reversed().thenComparing(User::getClassNo, Comparator.reverseOrder())).collect(Collectors.toList());
//方法2:直接對(duì)年齡進(jìn)行降序,再對(duì)班級(jí)進(jìn)行降序
userList = userList.stream().sorted(Comparator.comparing(User::getAge, Comparator.reverseOrder()).thenComparing(User::getClassNo, Comparator.reverseOrder())).collect(Collectors.toList());
//方式3:先對(duì)年齡進(jìn)行升序,再對(duì)班級(jí)進(jìn)行升序,最后對(duì)結(jié)果進(jìn)行反轉(zhuǎn)
userList = userList.stream().sorted(Comparator.comparing(User::getAge).thenComparing(User::getClassNo).reversed()).collect(Collectors.toList());

2.4年齡升序,班級(jí)降序

//方法1:先對(duì)年齡進(jìn)行升序,升序結(jié)果進(jìn)行反轉(zhuǎn),再進(jìn)行班級(jí)升序,結(jié)果進(jìn)行反轉(zhuǎn)(有點(diǎn)繞,年齡被排了三次升-降-升)
userList = userList.stream().sorted(Comparator.comparing(User::getAge).reversed().thenComparing(User::getClassNo).reversed()).collect(Collectors.toList());
//方法2:直接對(duì)年齡進(jìn)行升序,再對(duì)班級(jí)進(jìn)行降序
userList = userList.stream().sorted(Comparator.comparing(User::getAge).thenComparing(User::getClassNo, Comparator.reverseOrder())).collect(Collectors.toList());

總結(jié)

如果只進(jìn)行單個(gè)字段的升序降序排列,我們使用reversed() 或者 Comparator.reverseOrder() 都可以

如果要進(jìn)行多個(gè)字段的升序降序排列,我們還是使用 Comparator.reverseOrder() 會(huì)更優(yōu)雅、更好理解一些。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring?Boot?整合持久層之MyBatis

    Spring?Boot?整合持久層之MyBatis

    在實(shí)際開(kāi)發(fā)中不僅僅是要展示數(shù)據(jù),還要構(gòu)成數(shù)據(jù)模型添加數(shù)據(jù),這篇文章主要介紹了SpringBoot集成Mybatis操作數(shù)據(jù)庫(kù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • java.net.UnknownHostException異常的一般原因及解決步驟

    java.net.UnknownHostException異常的一般原因及解決步驟

    關(guān)于java.net.UnknownHostException大家也許都比較熟悉,這篇文章主要給大家介紹了關(guān)于java.net.UnknownHostException異常的一般原因及解決步驟,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • idea maven編譯報(bào)錯(cuò)Java heap space的解決方法

    idea maven編譯報(bào)錯(cuò)Java heap space的解決方法

    這篇文章主要為大家詳細(xì)介紹了idea maven編譯報(bào)錯(cuò)Java heap space的相關(guān)解決方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-04-04
  • 詳解Java中Iterator迭代器的用法

    詳解Java中Iterator迭代器的用法

    這篇文章主要介紹了Java中Iterator迭代器的用法,比較簡(jiǎn)單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-08-08
  • 分析Java中的類加載問(wèn)題

    分析Java中的類加載問(wèn)題

    很多時(shí)候提到類加載,大家總是沒(méi)法馬上回憶起順序,這篇文章會(huì)用一個(gè)例子為你把類加載的諸多問(wèn)題一次性澄清
    2021-06-06
  • java調(diào)用未知類的指定方法簡(jiǎn)單實(shí)例

    java調(diào)用未知類的指定方法簡(jiǎn)單實(shí)例

    這篇文章介紹了java調(diào)用未知類的指定方法簡(jiǎn)單實(shí)例,有需要的朋友可以參考一下
    2013-09-09
  • Java matches類,Pattern類及matcher類用法示例

    Java matches類,Pattern類及matcher類用法示例

    這篇文章主要介紹了Java matches類,Pattern類及matcher類用法,結(jié)合實(shí)例形式分析了java matches類,Pattern類及matcher類針對(duì)字符串常見(jiàn)操作技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2019-03-03
  • Spring過(guò)濾器中OncePerRequestFilter應(yīng)用實(shí)現(xiàn)

    Spring過(guò)濾器中OncePerRequestFilter應(yīng)用實(shí)現(xiàn)

    OncePerRequestFilter是Spring框架提供的一個(gè)過(guò)濾器基類,本文就來(lái)介紹一下Spring過(guò)濾器中OncePerRequestFilter應(yīng)用實(shí)現(xiàn),感興趣的可以了解一下
    2024-12-12
  • 詳細(xì)談?wù)凷pring事務(wù)是如何管理的

    詳細(xì)談?wù)凷pring事務(wù)是如何管理的

    在使用傳統(tǒng)的事務(wù)編程策略時(shí),程序代碼必然和具體的事務(wù)操作代碼耦合,而使用Spring事務(wù)管理策略恰好可以避免這種尷尬,Spring的事務(wù)管理提供了兩種方式:編程式事務(wù)管理和聲明式事務(wù)管理,這篇文章主要給大家介紹了關(guān)于Spring事務(wù)是如何管理的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • 解決mybatis一對(duì)多關(guān)聯(lián)查詢多條數(shù)據(jù)只顯示一條的問(wèn)題

    解決mybatis一對(duì)多關(guān)聯(lián)查詢多條數(shù)據(jù)只顯示一條的問(wèn)題

    這篇文章主要介紹了解決mybatis一對(duì)多關(guān)聯(lián)查詢多條數(shù)據(jù)只顯示一條的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12

最新評(píng)論

弥勒县| 陵川县| 苍溪县| 双峰县| 许昌县| 天祝| 昌乐县| 榆社县| 宝丰县| 巴彦淖尔市| 凤翔县| 郑州市| 扎囊县| 朝阳市| 金湖县| 周口市| 射洪县| 沂源县| 招远市| 东乌珠穆沁旗| 普兰店市| 桐城市| 白城市| 贡嘎县| 泽库县| 昭觉县| 余干县| 青州市| 长阳| 遂溪县| 石首市| 辽中县| 桂东县| 正安县| 平昌县| 钟祥市| 博乐市| 蓬溪县| 桓仁| 肥西县| 香格里拉县|