亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java 集合去重的三種方法

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

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

方法1:使用HashSet

如果對(duì)象的類(lèi)實(shí)現(xiàn)了equals()和hashCode()方法,并且這兩個(gè)方法是基于你想去重的那個(gè)屬性來(lái)實(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及以上版本)

通過(guò)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é)果自然就是唯一的。通過(guò)merge函數(shù)指定當(dāng)遇到相同鍵時(shí)保留第一個(gè)對(duì)象。

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

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

相關(guān)文章

  • Java創(chuàng)建多線程異步執(zhí)行實(shí)現(xiàn)代碼解析

    Java創(chuàng)建多線程異步執(zhí)行實(shí)現(xiàn)代碼解析

    這篇文章主要介紹了Java創(chuàng)建多線程異步執(zhí)行實(shí)現(xiàn)代碼解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • java實(shí)現(xiàn)的RSA加密算法詳解

    java實(shí)現(xiàn)的RSA加密算法詳解

    這篇文章主要介紹了java實(shí)現(xiàn)的RSA加密算法,結(jié)合實(shí)例形式詳細(xì)分析了RSA加密解密的原理、java實(shí)現(xiàn)方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-06-06
  • Java線程池用法實(shí)戰(zhàn)案例分析

    Java線程池用法實(shí)戰(zhàn)案例分析

    這篇文章主要介紹了Java線程池用法,結(jié)合具體案例形式分析了java線程池創(chuàng)建、使用、終止等相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下
    2019-10-10
  • springboot2.x實(shí)現(xiàn)oauth2授權(quán)碼登陸的方法

    springboot2.x實(shí)現(xiàn)oauth2授權(quán)碼登陸的方法

    這篇文章主要介紹了springboot2.x實(shí)現(xiàn)oauth2授權(quán)碼登陸的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • WebService教程詳解(二)

    WebService教程詳解(二)

    這篇文章主要介紹了WebService教程詳解(二) 的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • java一個(gè)數(shù)據(jù)整理的方法代碼實(shí)例

    java一個(gè)數(shù)據(jù)整理的方法代碼實(shí)例

    這篇文章主要介紹了java一個(gè)數(shù)據(jù)整理的方法代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • java jdbc連接和使用詳細(xì)介紹

    java jdbc連接和使用詳細(xì)介紹

    這篇文章主要介紹了 java jdbc連接和使用詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • Java?File類(lèi)的概述及常用方法使用詳解

    Java?File類(lèi)的概述及常用方法使用詳解

    Java?File類(lèi)的功能非常強(qiáng)大,下面這篇文章主要給大家介紹了關(guān)于Java中File類(lèi)的概述及常用方法使用,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • Java多線程通信:交替打印ABAB實(shí)例

    Java多線程通信:交替打印ABAB實(shí)例

    這篇文章主要介紹了Java多線程通信:交替打印ABAB實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • Spring Boot如何獲取maven打包時(shí)間

    Spring Boot如何獲取maven打包時(shí)間

    這篇文章主要介紹了Spring Boot如何獲取maven打包時(shí)間,首先引入maven打包插件,本文分步驟給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2024-03-03

最新評(píng)論