欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java?List集合取交集的五種常見方式總結(jié)

 更新時(shí)間:2024年07月23日 09:05:42   作者:偏愛星霧纏繞15  
在Java中取兩個(gè)List集合的交集可以通過(guò)多種方式實(shí)現(xiàn),下面這篇文章主要給大家介紹了關(guān)于Java?List集合取交集的五種常見方式,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

在Java中,List 集合是用于存儲(chǔ)一系列對(duì)象的數(shù)據(jù)結(jié)構(gòu)。當(dāng)我們要獲取兩個(gè) List 集合的交集時(shí),有多種方法可以實(shí)現(xiàn)。下面將介紹幾種常見的方式。

1. 使用Java 8的Stream API

Java 8引入了Stream API,它提供了一種聲明式的方式來(lái)處理數(shù)據(jù)。

import java.util.Arrays;  
import java.util.List;  
import java.util.stream.Collectors;  
  
public class ListIntersection {  
    public static void main(String[] args) {  
        List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5);  
        List<Integer> list2 = Arrays.asList(4, 5, 6, 7, 8);  
  
        List<Integer> intersection = list1.stream()  
                .filter(list2::contains)  
                .collect(Collectors.toList());  
  
        System.out.println("Intersection: " + intersection);  
    }  
}

這段代碼首先創(chuàng)建了兩個(gè) List 對(duì)象 list1 和 list2。然后,通過(guò) list1.stream() 獲取 list1 的Stream對(duì)象,并使用 filter 方法篩選出同時(shí)存在于 list2 中的元素。最后,使用 collect 方法將結(jié)果轉(zhuǎn)換回 List 對(duì)象。

2. 使用Java的retainAll方法

retainAll 方法是 Collection 接口的一部分,它可以用來(lái)保留在指定集合中也存在的元素。不過(guò),retainAll 方法會(huì)直接修改調(diào)用它的集合,因此在使用前需要?jiǎng)?chuàng)建一個(gè)副本。

import java.util.ArrayList;  
import java.util.Arrays;  
import java.util.List;  
  
public class ListIntersection {  
    public static void main(String[] args) {  
        List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));  
        List<Integer> list2 = Arrays.asList(4, 5, 6, 7, 8);  
  
        List<Integer> intersection = new ArrayList<>(list1);  
        intersection.retainAll(list2);  
  
        System.out.println("Intersection: " + intersection);  
    }  
}

這段代碼創(chuàng)建了兩個(gè) List 對(duì)象 list1 和 list2,然后將 list1 的一個(gè)副本賦值給 intersection。接著,調(diào)用 retainAll 方法來(lái)保留 intersection 中也存在于 list2 中的元素。

3. 使用Apache Commons Collections庫(kù)

如果你使用的是Apache Commons Collections庫(kù),那么可以利用 CollectionUtils 類提供的 intersection 方法來(lái)更簡(jiǎn)單地求取交集。

import org.apache.commons.collections4.CollectionUtils;  
import org.apache.commons.collections4.ListUtils;  
  
import java.util.Arrays;  
import java.util.List;  
  
public class ListIntersection {  
    public static void main(String[] args) {  
        List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5);  
        List<Integer> list2 = Arrays.asList(4, 5, 6, 7, 8);  
  
        List<Integer> intersection = (List<Integer>) CollectionUtils.intersection(list1, list2);  
  
        System.out.println("Intersection: " + intersection);  
    }  
}

這段代碼首先引入了Apache Commons Collections庫(kù)的相關(guān)類,然后利用 CollectionUtils.intersection 方法來(lái)直接求取兩個(gè) List 的交集。注意這里需要對(duì)返回的集合進(jìn)行類型轉(zhuǎn)換。

4.使用Java 8的并行流(Parallel Streams)

如果說(shuō)你的數(shù)據(jù)量很大,或者你的機(jī)器有多個(gè)處理器核心,你可以考慮使用并行流來(lái)加速交集的計(jì)算。 

List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> list2 = Arrays.asList(4, 5, 6, 7, 8);

Set<Integer> set2 = new HashSet<>(list2); // 使用HashSet提高查找效率

List<Integer> intersection = list1.parallelStream()
    .filter(set2::contains)
    .collect(Collectors.toList());

注意:大數(shù)據(jù)量下,會(huì)比較適合使用并行流

5.使用傳統(tǒng)的for循環(huán)遍歷

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

public class ListIntersection {
    public static void main(String[] args) {
        List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5);
        List<Integer> list2 = Arrays.asList(4, 5, 6, 7, 8);

        Set<Integer> set1 = new HashSet<>(list1);
        List<Integer> intersection = new ArrayList<>();

        for (Integer num : list2) {
            if (set1.contains(num)) {
                intersection.add(num);
            }
        }

        System.out.println("交集:" + intersection);
    }
}

至于這里為什么這么寫,小伙伴們可以去研究下。。。。。(賣個(gè)關(guān)子)

總結(jié)

以上就是在Java中獲取兩個(gè) List 集合交集的幾種方式。你可以根據(jù)具體需求和使用的庫(kù)來(lái)選擇合適的方法。

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

相關(guān)文章

  • java字節(jié)字符轉(zhuǎn)換流操作詳解

    java字節(jié)字符轉(zhuǎn)換流操作詳解

    這篇文章主要介紹了java字節(jié)字符轉(zhuǎn)換流操作,結(jié)合實(shí)例形式詳細(xì)分析了Java字符流轉(zhuǎn)換相關(guān)原理、實(shí)現(xiàn)方法及操作注意事項(xiàng),需要的朋友可以參考下
    2019-09-09
  • Java異常處理深入理解

    Java異常處理深入理解

    這篇文章主要介紹了java項(xiàng)目常用異常處理匯總,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-07-07
  • Java方法遞歸的形式和常見遞歸算法(方法遞歸結(jié)合File類查找文件)

    Java方法遞歸的形式和常見遞歸算法(方法遞歸結(jié)合File類查找文件)

    方法遞歸方法直接調(diào)用自己或者間接調(diào)用自己的形式稱為方法遞歸( recursion),遞歸做為一種算法在程序設(shè)計(jì)語(yǔ)言中廣泛應(yīng)用,這篇文章主要介紹了Java方法遞歸的形式和常見遞歸算法-方法遞歸結(jié)合File類查找文件,需要的朋友可以參考下
    2023-02-02
  • IDEA上運(yùn)行Flink任務(wù)的實(shí)戰(zhàn)教程

    IDEA上運(yùn)行Flink任務(wù)的實(shí)戰(zhàn)教程

    這篇文章主要介紹了IDEA上運(yùn)行Flink任務(wù)的實(shí)戰(zhàn)教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 如何在maven本地倉(cāng)庫(kù)中添加oracle的jdbc驅(qū)動(dòng)

    如何在maven本地倉(cāng)庫(kù)中添加oracle的jdbc驅(qū)動(dòng)

    文章介紹了在Maven項(xiàng)目中添加Oracle數(shù)據(jù)庫(kù)驅(qū)動(dòng)ojdbc5時(shí)遇到的問(wèn)題以及解決問(wèn)題的兩種方法,方法一為簡(jiǎn)單粗暴,但沒(méi)有體現(xiàn)Maven倉(cāng)庫(kù)的作用,需要手動(dòng)管理jar包,方法二為在Maven本地倉(cāng)庫(kù)中添加Oracle的JDBC驅(qū)動(dòng),過(guò)程較為繁瑣,但配置一次后可以多次使用
    2024-11-11
  • Java實(shí)現(xiàn)簡(jiǎn)易俄羅斯方塊

    Java實(shí)現(xiàn)簡(jiǎn)易俄羅斯方塊

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)易俄羅斯方塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • 在Java與Kotlin之間如何進(jìn)行互操作詳解

    在Java與Kotlin之間如何進(jìn)行互操作詳解

    這篇文章主要給大家介紹了關(guān)于在Java和Kotlin之間如何進(jìn)行互操作的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • SpringCloud自定義loadbalancer實(shí)現(xiàn)標(biāo)簽路由的詳細(xì)方案

    SpringCloud自定義loadbalancer實(shí)現(xiàn)標(biāo)簽路由的詳細(xì)方案

    本文介紹了通過(guò)標(biāo)簽路由解決前端開發(fā)環(huán)境接口調(diào)用慢的問(wèn)題,實(shí)現(xiàn)方案包括在本地服務(wù)注冊(cè)元數(shù)據(jù)、自定義負(fù)載均衡器、以及網(wǎng)關(guān)配置等步驟,通過(guò)環(huán)境變量設(shè)置標(biāo)簽,網(wǎng)關(guān)根據(jù)請(qǐng)求頭中的標(biāo)簽進(jìn)行路由,從而實(shí)現(xiàn)前后端互不干擾的開發(fā)調(diào)試,感興趣的朋友一起看看吧
    2025-02-02
  • JavaWeb實(shí)現(xiàn)打印功能

    JavaWeb實(shí)現(xiàn)打印功能

    這篇文章主要介紹了JavaWeb實(shí)現(xiàn)打印功能的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-05-05
  • 通過(guò)volatile驗(yàn)證線程之間的可見性

    通過(guò)volatile驗(yàn)證線程之間的可見性

    這篇文章主要介紹了通過(guò)volatile驗(yàn)證線程之間的可見性,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10

最新評(píng)論