Java?List集合取交集的五種常見方式總結
前言
在Java中,List 集合是用于存儲一系列對象的數(shù)據(jù)結構。當我們要獲取兩個 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 方法將結果轉換回 List 對象。
2. 使用Java的retainAll方法
retainAll 方法是 Collection 接口的一部分,它可以用來保留在指定集合中也存在的元素。不過,retainAll 方法會直接修改調用它的集合,因此在使用前需要創(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。接著,調用 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庫的相關類,然后利用 CollectionUtils.intersection 方法來直接求取兩個 List 的交集。注意這里需要對返回的集合進行類型轉換。
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);
}
}至于這里為什么這么寫,小伙伴們可以去研究下。。。。。(賣個關子)
總結
以上就是在Java中獲取兩個 List 集合交集的幾種方式。你可以根據(jù)具體需求和使用的庫來選擇合適的方法。
到此這篇關于Java List集合取交集的五種常見方式的文章就介紹到這了,更多相關Java List集合取交集內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java方法遞歸的形式和常見遞歸算法(方法遞歸結合File類查找文件)
方法遞歸方法直接調用自己或者間接調用自己的形式稱為方法遞歸( recursion),遞歸做為一種算法在程序設計語言中廣泛應用,這篇文章主要介紹了Java方法遞歸的形式和常見遞歸算法-方法遞歸結合File類查找文件,需要的朋友可以參考下2023-02-02
SpringCloud自定義loadbalancer實現(xiàn)標簽路由的詳細方案
本文介紹了通過標簽路由解決前端開發(fā)環(huán)境接口調用慢的問題,實現(xiàn)方案包括在本地服務注冊元數(shù)據(jù)、自定義負載均衡器、以及網關配置等步驟,通過環(huán)境變量設置標簽,網關根據(jù)請求頭中的標簽進行路由,從而實現(xiàn)前后端互不干擾的開發(fā)調試,感興趣的朋友一起看看吧2025-02-02

