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

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

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

前言

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

1. 使用Java 8的Stream API

Java 8引入了Stream API,它提供了一種聲明式的方式來處理數(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)建了兩個 List 對象 list1 和 list2。然后,通過 list1.stream() 獲取 list1 的Stream對象,并使用 filter 方法篩選出同時存在于 list2 中的元素。最后,使用 collect 方法將結(jié)果轉(zhuǎn)換回 List 對象。

2. 使用Java的retainAll方法

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

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)建了兩個 List 對象 list1 和 list2,然后將 list1 的一個副本賦值給 intersection。接著,調(diào)用 retainAll 方法來保留 intersection 中也存在于 list2 中的元素。

3. 使用Apache Commons Collections庫

如果你使用的是Apache Commons Collections庫,那么可以利用 CollectionUtils 類提供的 intersection 方法來更簡單地求取交集。

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庫的相關(guān)類,然后利用 CollectionUtils.intersection 方法來直接求取兩個 List 的交集。注意這里需要對返回的集合進行類型轉(zhuǎn)換。

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

如果說你的數(shù)據(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ù)量下,會比較適合使用并行流

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);
    }
}

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

總結(jié)

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

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

相關(guān)文章

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

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

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

    Java異常處理深入理解

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

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

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

    IDEA上運行Flink任務的實戰(zhàn)教程

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

    如何在maven本地倉庫中添加oracle的jdbc驅(qū)動

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

    Java實現(xiàn)簡易俄羅斯方塊

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

    在Java與Kotlin之間如何進行互操作詳解

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

    SpringCloud自定義loadbalancer實現(xiàn)標簽路由的詳細方案

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

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

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

    通過volatile驗證線程之間的可見性

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

最新評論