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

Java 集合去重的三種方法

 更新時(shí)間:2024年07月31日 09:18:09   作者:qq_36608622  
本主要介紹了Java 集合去重的三種方法,包含HashSet,Stream API和手動(dòng)遍歷并使用Map三種,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

在Java中,如果你有一個(gè)集合(如List、Set等),其中包含自定義對(duì)象,并且你希望根據(jù)某個(gè)特定屬性去重,只保留每個(gè)具有唯一屬性值的對(duì)象的一個(gè)實(shí)例,你可以使用以下幾種方法:

方法1:使用HashSet

如果對(duì)象的類實(shí)現(xiàn)了equals()和hashCode()方法,并且這兩個(gè)方法是基于你想去重的那個(gè)屬性來實(shí)現(xiàn)的,那么可以直接將列表轉(zhuǎn)換為HashSet以達(dá)到去重的目的。

List<MyObject> list = ...; // 假設(shè)這是你的原始列表
Set<MyObject> uniqueSet = new HashSet<>(list);
List<MyObject> uniqueList = new ArrayList<>(uniqueSet);

方法2:Stream API (Java 8及以上版本)

通過Java 8引入的Stream API可以更方便地處理這種情況,尤其是當(dāng)你想基于對(duì)象的某個(gè)屬性進(jìn)行去重時(shí):

List<MyObject> list = ...;
List<MyObject> uniqueList = list.stream()
    .collect(Collectors.collectingAndThen(
        Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(MyObject::getProperty))),
        ArrayList::new
    ));

// 或者簡(jiǎn)化版本,如果MyObject直接或間接實(shí)現(xiàn)了Comparable接口:
List<MyObject> uniqueList = list.stream()
    .distinct()
    .collect(Collectors.toList());

上述代碼中,我們首先將列表轉(zhuǎn)換為流,然后使用Collectors.toCollection()收集到一個(gè)TreeSet中。TreeSet會(huì)自動(dòng)根據(jù)傳入的比較器對(duì)元素排序并去除重復(fù)項(xiàng)。這里假設(shè)getProperty()是獲取對(duì)象屬性的方法。最后將TreeSet轉(zhuǎn)換回ArrayList。

方法3:手動(dòng)遍歷并使用Map

如果你想根據(jù)對(duì)象的某個(gè)屬性保持第一個(gè)出現(xiàn)的對(duì)象,可以使用toMap方法:

List<MyObject> list = ...;
Map<String, MyObject> map = list.stream()
    .collect(Collectors.toMap(
        MyObject::getProperty, // key extractor function
        Function.identity(),   // value mapping function
        (o1, o2) -> o1       // merge function - 如果有沖突則保留第一個(gè)對(duì)象
    ));
List<MyObject> uniqueList = new ArrayList<>(map.values());

這個(gè)方法會(huì)根據(jù)對(duì)象的屬性值作為鍵存入Map中,由于Map不允許鍵重復(fù),所以結(jié)果自然就是唯一的。通過merge函數(shù)指定當(dāng)遇到相同鍵時(shí)保留第一個(gè)對(duì)象。

請(qǐng)注意,這些示例假定MyObject是一個(gè)代表具體業(yè)務(wù)實(shí)體的類,而getProperty()是返回該類中用于判斷是否重復(fù)的屬性值的方法。根據(jù)實(shí)際情況調(diào)整類名和方法名。

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

相關(guān)文章

  • Spring Boot Actuator應(yīng)用監(jiān)控與管理的詳細(xì)步驟

    Spring Boot Actuator應(yīng)用監(jiān)控與管理的詳細(xì)步驟

    SpringBootActuator是SpringBoot的監(jiān)控工具,提供健康檢查、性能指標(biāo)、日志管理等核心功能,支持自定義和擴(kuò)展端點(diǎn),并通過SpringSecurity配置安全權(quán)限,便于生產(chǎn)環(huán)境應(yīng)用監(jiān)控與管理,本文給大家介紹Spring Boot Actuator應(yīng)用監(jiān)控與管理的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2025-07-07
  • SpringBoot處理跨域請(qǐng)求的四種方法

    SpringBoot處理跨域請(qǐng)求的四種方法

    在現(xiàn)代Web應(yīng)用中,由于安全性和隱私的考慮,瀏覽器限制了從一個(gè)域向另一個(gè)域發(fā)起的跨域HTTP請(qǐng)求,解決這個(gè)問題的一種常見方式是實(shí)現(xiàn)跨域資源共享(CORS),SpringBoot提供了多種方式來處理跨域請(qǐng)求,本文將介紹其中的幾種方法,感興趣的朋友可以參考下
    2023-12-12
  • SpringBoot通過注解下載任意對(duì)象

    SpringBoot通過注解下載任意對(duì)象

    下載功能應(yīng)該是比較常見的功能了,雖然一個(gè)項(xiàng)目里面可能出現(xiàn)的不多,但是基本上每個(gè)項(xiàng)目都會(huì)有,而且有些下載功能其實(shí)還是比較繁雜的,這篇文章主要介紹了SpringBoot一個(gè)注解就能幫你下載任意對(duì)象,需要的朋友可以參考下
    2023-08-08
  • Java并發(fā)編程預(yù)防死鎖過程詳解

    Java并發(fā)編程預(yù)防死鎖過程詳解

    這篇文章主要介紹了Java并發(fā)編程預(yù)防死鎖過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • springcloud gateway網(wǎng)關(guān)服務(wù)啟動(dòng)報(bào)錯(cuò)的解決

    springcloud gateway網(wǎng)關(guān)服務(wù)啟動(dòng)報(bào)錯(cuò)的解決

    這篇文章主要介紹了springcloud gateway網(wǎng)關(guān)服務(wù)啟動(dòng)報(bào)錯(cuò)的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java Socket實(shí)現(xiàn)多人聊天系統(tǒng)

    Java Socket實(shí)現(xiàn)多人聊天系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java Socket實(shí)現(xiàn)多人聊天系統(tǒng),具有圖形界面,實(shí)現(xiàn)文件傳輸功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 詳談springboot過濾器和攔截器的實(shí)現(xiàn)及區(qū)別

    詳談springboot過濾器和攔截器的實(shí)現(xiàn)及區(qū)別

    今天小編就為大家分享一篇詳談springboot過濾器和攔截器的實(shí)現(xiàn)及區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • JavaWeb實(shí)現(xiàn)文件的上傳與下載

    JavaWeb實(shí)現(xiàn)文件的上傳與下載

    這篇文章主要為大家詳細(xì)介紹了JavaWeb實(shí)現(xiàn)文件的上傳與下載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • Java實(shí)現(xiàn)提取圖片邊緣的示例代碼

    Java實(shí)現(xiàn)提取圖片邊緣的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用Java實(shí)現(xiàn)提取圖片邊緣的功能,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下
    2023-06-06
  • Java入門基礎(chǔ)之常規(guī)的命名方法和變量的值及其引用

    Java入門基礎(chǔ)之常規(guī)的命名方法和變量的值及其引用

    這篇文章主要介紹了Java的命名方法和變量的值及其引用,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09

最新評(píng)論

安丘市| 蓝田县| 阿勒泰市| 色达县| 遵义县| 儋州市| 静海县| 建德市| 淮阳县| 会东县| 达孜县| 郓城县| 拜城县| 福海县| 板桥市| 宝山区| 延寿县| 吉安县| 寿光市| 万载县| 清流县| 呼伦贝尔市| 伊春市| 土默特左旗| 习水县| 德安县| 盐山县| 抚松县| 宜君县| 怀集县| 仙桃市| 宣恩县| 裕民县| 苍山县| 淮南市| 漳浦县| 宜宾市| 搜索| 龙陵县| 安庆市| 余庆县|