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

java集合List快速實現(xiàn)重復(fù)判斷的方法小結(jié)

 更新時間:2024年12月31日 08:21:37   作者:熒光石  
在java編寫代碼中經(jīng)常會遇到某些重復(fù)判定或者去重的操作,本文主要為大家介紹了幾個常用方法,感興趣的小伙伴可以跟隨不想一起學(xué)習(xí)一下

在java編寫代碼中經(jīng)常會遇到某些重復(fù)判定或者去重的操作,包括:

  • 數(shù)據(jù)清洗:從數(shù)據(jù)庫或其他來源獲取的數(shù)據(jù)可能包含重復(fù)項,需要去重。
  • 用戶輸入:前段傳入的數(shù)據(jù)可能存在重復(fù),需要校驗去除重來避免處理時出現(xiàn)錯誤或不一致。
  • 列表合并:將多個列表合并后,可能會產(chǎn)生重復(fù)元素,去重也是合并后常見的操作。

以下是用來記錄會用到的去重操作,以防忘記:

1、使用流式 API

使用流式 API,通過流式 API 優(yōu)雅地檢查重復(fù)數(shù)據(jù)(推薦)

import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

public class CheckDuplicate {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("A", "B", "C", "A");

        // 找到重復(fù)元素
        Set<String> duplicates = list.stream()
                .filter(item -> list.stream().filter(item::equals).count() > 1)
                .collect(Collectors.toSet());

        System.out.println("重復(fù)元素: " + duplicates);
        System.out.println("是否存在重復(fù)數(shù)據(jù): " + !duplicates.isEmpty());
    }
}

stream 是一種功能非常強大的方式,可以很便利的使用聲明式方法對集合進行處理,不需要顯式地操作集合中的元素。它提供了一個更加函數(shù)式的編程模型,允許你進行過濾、轉(zhuǎn)換、收集等操作,同時鏈?zhǔn)秸{(diào)用,提高了代碼的可讀性和簡潔性。

相比下forEach 是集合類的一個方法,用于對集合中的每個元素執(zhí)行一個操作,通常是遍歷操作。并不提供流式的轉(zhuǎn)換或過濾功能,更多是為了逐個訪問元素并執(zhí)行某些操作。forEach 的典型用法是遍歷集合,但不適合用于流式的處理,在這里 forEach 需要顯式地在內(nèi)部寫邏輯來計算元素的出現(xiàn)情況。

2、使用原生 Set 快速檢查

使用原生 Set 快速檢查,可以直接使用 HashSet 或 LinkedHashSet 來判斷

import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class CheckDuplicate {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("A", "B", "C", "A");

        Set<String> seen = new HashSet<>();
        boolean hasDuplicate = list.stream().anyMatch(item -> !seen.add(item));

        System.out.println("是否存在重復(fù)數(shù)據(jù): " + hasDuplicate);
    }
}

!seen.add(item) 會返回:

  • true--重復(fù)元素,
  • false--非重復(fù)元素,第一次添加

anyMatch會匹配所有的流元素,一旦出現(xiàn)符合條件的重復(fù)元素就會自動結(jié)束流,僅適合判斷是否會有重復(fù)元素。

3、使用new HashSet<>(list)

使用new HashSet<>(list),最后判斷兩個list間size大小判斷是否重復(fù)

import cn.hutool.core.collection.CollUtil;

import java.util.Arrays;
import java.util.List;
import java.util.Set;

public class CheckDuplicate {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("A", "B", "C", "A");

        // 使用 Hutool 的工具方法創(chuàng)建 HashSet
        Set<String> set = new HashSet<>(list);
        boolean hasDuplicate = set.size() != list.size();

        System.out.println("是否存在重復(fù)數(shù)據(jù): " + hasDuplicate);
    }
}

比較兩個集合size大小就可判斷是否存在重復(fù)元素,因為Set下的集合是自動去重的,如果存在重復(fù)則集合大小會縮減

4、使用CollUtil.countMap()方法

如果有hutool工具,可以使用CollUtil.countMap()方法

import cn.hutool.core.collection.CollUtil;

import java.util.Arrays;
import java.util.List;
import java.util.Map;

public class CheckDuplicate {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("A", "B", "C", "A", "B");

        // 統(tǒng)計每個元素出現(xiàn)的次數(shù)
        Map<String, Integer> countMap = CollUtil.countMap(list);
        
        // 打印重復(fù)元素
        countMap.forEach((key, value) -> {
            if (value > 1) {
                System.out.println("重復(fù)元素: " + key + ",出現(xiàn)次數(shù): " + value);
            }
        });
    }
}

Collutil.countMap()方法不僅可以統(tǒng)計出現(xiàn)的重復(fù)的元素,還可以統(tǒng)計出現(xiàn)的頻次,返回結(jié)果如下:

重復(fù)元素: A,出現(xiàn)次數(shù): 2  
重復(fù)元素: B,出現(xiàn)次數(shù): 2

相應(yīng)的還有CollUtil.newHashSet() 去重,CollUtil.getSet()轉(zhuǎn)換Set<>集合去重,以及CollUtil.getCommon()集合交差去重,方法很多有興趣的伙伴們可以去研究研究。

結(jié)語

總得來說java下stream流是非常不錯的方式,而且其下有很多filter,iteratorfilter(), map(), collect()等操作,便于處理復(fù)雜邏輯鏈路問題

當(dāng)然,如果僅有一些簡單內(nèi)部處理,直接foreach是最簡單高效的方式,避免了流的轉(zhuǎn)換。

到此這篇關(guān)于java集合List快速實現(xiàn)重復(fù)判斷的方法小結(jié)的文章就介紹到這了,更多相關(guān)java重復(fù)判斷內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 創(chuàng)建Java線程安全類的七種方法

    創(chuàng)建Java線程安全類的七種方法

    線程安全是指某個方法或某段代碼,在多線程中能夠正確的執(zhí)行,不會出現(xiàn)數(shù)據(jù)不一致或數(shù)據(jù)污染的情況,我們把這樣的程序稱之為線程安全的,反之則為非線程安全的,下面這篇文章主要給大家介紹了關(guān)于創(chuàng)建Java線程安全類的七種方法,需要的朋友可以參考下
    2022-06-06
  • 史上最全MybatisPlus從入門到精通

    史上最全MybatisPlus從入門到精通

    MyBatis-Plus是MyBatis增強工具,簡化開發(fā)并提升效率,支持自動映射表名/字段與實體類,提供條件構(gòu)造器、多種查詢方式(等值/范圍/模糊/分頁等)、主鍵策略(如雪花算法、UUID)及分頁插件配置,實現(xiàn)靈活的數(shù)據(jù)操作與數(shù)據(jù)庫交互,需要的朋友跟隨小編一起看看吧
    2025-08-08
  • 基于GeoTools和SpringBoot的省域駕車最快路線規(guī)劃方法

    基于GeoTools和SpringBoot的省域駕車最快路線規(guī)劃方法

    本文探討基于GeoTools與SpringBoot的省域駕車最快路線規(guī)劃方法,解決復(fù)雜路況與地理因素影響,通過天地圖API計算并存儲距離數(shù)據(jù),展示湖南、新疆、黑龍江等地的路線成果,為交通與經(jīng)濟影響評估提供參考,感興趣的朋友快來一起學(xué)習(xí)吧
    2025-07-07
  • IDEA中Maven爆紅以及依賴下載失敗的最全解決方案

    IDEA中Maven爆紅以及依賴下載失敗的最全解決方案

    這篇文章主要介紹了IDEA中Maven爆紅,依賴下載失敗的最全解決方案,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • 詳解mybatis中的if-else的嵌套使用

    詳解mybatis中的if-else的嵌套使用

    本文主要介紹了mybatis中的if-else的嵌套使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Java中常用解析工具jackson及fastjson的使用

    Java中常用解析工具jackson及fastjson的使用

    今天給大家?guī)淼氖顷P(guān)于Java解析工具的相關(guān)知識,文章圍繞著jackson及fastjson的使用展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Java 設(shè)計模式原則之迪米特法則詳解

    Java 設(shè)計模式原則之迪米特法則詳解

    這篇文章主要介紹了Java 設(shè)計模式原則之迪米特法則詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 解決feign之間文件上傳報錯:Error converting request body的問題

    解決feign之間文件上傳報錯:Error converting request body

    這篇文章主要介紹了解決feign之間文件上傳報錯:Error converting request body的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • SpringBoot war包部署到Tomcat服務(wù)器

    SpringBoot war包部署到Tomcat服務(wù)器

    這篇文章主要介紹了SpringBoot war包部署到Tomcat服務(wù)器,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • 冒泡排序算法原理及JAVA實現(xiàn)代碼

    冒泡排序算法原理及JAVA實現(xiàn)代碼

    關(guān)鍵字較小的記錄好比氣泡逐趟上浮,關(guān)鍵字較大的記錄好比石塊下沉,每趟有一塊最大的石塊沉底
    2014-01-01

最新評論

乐亭县| 宝坻区| 苍南县| 东兰县| 九寨沟县| 青河县| 南召县| 科尔| 离岛区| 读书| 靖州| 隆子县| 大埔区| 平昌县| 黄石市| 金山区| 邯郸县| 射洪县| 明溪县| 酉阳| 云阳县| 武夷山市| 正定县| 绥宁县| 车致| 龙州县| 扎鲁特旗| 东丰县| 金川县| 张家港市| 楚雄市| 北海市| 钟祥市| 若羌县| 通江县| 时尚| 夏津县| 芮城县| 万载县| 墨竹工卡县| 北安市|