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

java中stream去重的幾種方式舉例

 更新時間:2023年07月19日 16:59:23   作者:zml_666  
Stream流是數(shù)據(jù)渠道,用于操作數(shù)據(jù)源(集合、數(shù)組等)所生成的元素序列,這篇文章主要給大家介紹了關(guān)于java中stream去重的幾種方式,需要的朋友可以參考下

使用 Stream 的 distinct() 方法

這個方法會根據(jù)元素的 hashCode() 和 equals() 方法來判斷是否重復(fù)。如果是自定義的類,需要重寫這兩個方法。

示例:

//利用java8的stream去重
List uniqueList = list.stream()
					.distinct()
					.collect(Collectors.toList());
System.out.println(uniqueList.toString());

使用 collectingAndThen() 和 toCollection() 方法

這個方法可以根據(jù)元素的某個屬性或者多個屬性來去重,比如 name 或者 name+address。這個方法會使用 TreeSet 來排序元素,所以不能保持原來的順序。

示例:

//根據(jù)name屬性去重
List<User> lt = list.stream().collect(
        collectingAndThen(
                toCollection(() -> new TreeSet<>(Comparator.comparing(User::getName))),
                ArrayList::new)
);
System.out.println("去重后的:" + lt);

使用 filter() 方法

這個方法需要自定義一個 Predicate 函數(shù),用一個 Set 來記錄已經(jīng)出現(xiàn)過的元素,然后過濾掉重復(fù)的元素。

示例:

//定義一個Predicate函數(shù)
private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
    Set<Object> seen = ConcurrentHashMap.newKeySet();
    return t -> seen.add(keyExtractor.apply(t));
}
//根據(jù)age屬性去重
list.stream().filter(distinctByKey(s -> s.getAge()))
        .forEach(System.out::println);

補充知識:自定義去重

如何采用stream進(jìn)行自定義去重呢?

我們以age字段為例,進(jìn)行去重

預(yù)期結(jié)果

總結(jié)

到此這篇關(guān)于java中stream去重的幾種方式的文章就介紹到這了,更多相關(guān)java stream去重內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MyBatis-Plus中實現(xiàn)自定義復(fù)雜排序邏輯的詳細(xì)步驟

    MyBatis-Plus中實現(xiàn)自定義復(fù)雜排序邏輯的詳細(xì)步驟

    這篇文章主要介紹了MyBatis-Plus中實現(xiàn)自定義復(fù)雜排序邏輯,通過使用MyBatis-Plus的QueryWrapper和SQL原始片段,我們可以靈活地實現(xiàn)復(fù)雜的數(shù)據(jù)排序邏輯,這種方法尤其適用于需要對數(shù)據(jù)進(jìn)行特定規(guī)則排序的場景,需要的朋友可以參考下
    2024-07-07
  • springboot dynamic多數(shù)據(jù)源demo以及常見切換、事務(wù)的問題

    springboot dynamic多數(shù)據(jù)源demo以及常見切換、事務(wù)的問題

    這篇文章主要介紹了springboot dynamic多數(shù)據(jù)源demo以及常見切換、事務(wù)的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • SpringBoot使用注解集成Redis緩存的示例代碼

    SpringBoot使用注解集成Redis緩存的示例代碼

    這篇文章主要介紹了在?Spring?Boot?中使用注解集成?Redis?緩存的步驟,包括添加依賴、創(chuàng)建相關(guān)配置類、需要緩存數(shù)據(jù)的類(TestService)以及測試方法(如在?Controller?中的?redisTest?和?redisCache?方法),還對一些關(guān)鍵代碼和配置進(jìn)行了詳細(xì)說明
    2025-01-01
  • 關(guān)于break和continue以及l(fā)abel的區(qū)別和作用(詳解)

    關(guān)于break和continue以及l(fā)abel的區(qū)別和作用(詳解)

    下面小編就為大家?guī)硪黄P(guān)于break和continue以及l(fā)abel的區(qū)別和作用(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • SpringBoot接口惡意刷新和暴力請求的解決方法

    SpringBoot接口惡意刷新和暴力請求的解決方法

    在實際項目使用中,必須要考慮服務(wù)的安全性,當(dāng)服務(wù)部署到互聯(lián)網(wǎng)以后,就要考慮服務(wù)被惡意請求和暴力攻擊的情況,所以本文給大家介紹了SpringBoot接口惡意刷新和暴力請求的解決方法,需要的朋友可以參考下
    2024-11-11
  • MyBatis-Plus如何實現(xiàn)自動加密解密

    MyBatis-Plus如何實現(xiàn)自動加密解密

    這篇文章主要介紹了MyBatis-Plus實現(xiàn)自動加密解密方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringBoot整合RabbitMQ示例詳解

    SpringBoot整合RabbitMQ示例詳解

    這篇文章主要介紹了SpringBoot整合RabbitMQ示例詳解,RabbitMQ是一個實現(xiàn)了AMQP高級消息隊列協(xié)議的消息隊列服務(wù),用Erlang語言。是面向消息的中間件,需要的朋友可以參考下
    2023-07-07
  • 部署Nacos的源碼環(huán)境搭建過程

    部署Nacos的源碼環(huán)境搭建過程

    這篇文章主要為大家介紹了部署Nacos的源碼環(huán)境搭建過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 使用Feign遠(yuǎn)程調(diào)用時,序列化對象失敗的解決

    使用Feign遠(yuǎn)程調(diào)用時,序列化對象失敗的解決

    這篇文章主要介紹了使用Feign遠(yuǎn)程調(diào)用時,序列化對象失敗的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Spring Boot2.x集成JPA快速開發(fā)的示例代碼

    Spring Boot2.x集成JPA快速開發(fā)的示例代碼

    這篇文章主要介紹了Spring Boot2.x集成JPA快速開發(fā),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05

最新評論

遵义市| 武威市| 济南市| 日土县| 长春市| 金寨县| 峨边| 镶黄旗| 呼伦贝尔市| 湟中县| 左云县| 建宁县| 屏南县| 承德市| 东丽区| 三穗县| 白河县| 忻城县| 福泉市| 周口市| 会同县| 萨嘎县| 双牌县| 谷城县| 衡山县| 达州市| 绥宁县| 微博| 封开县| 阳曲县| 延长县| 合肥市| 东城区| 建宁县| 红原县| 乌海市| 福海县| 新野县| 巴马| 青浦区| 邢台县|