Java List集合取交集的五种常见方式总结
作者:偏爱星雾缠绕15
前言
在Java中,List
集合是用于存储一系列对象的数据结构。当我们要获取两个 List
集合的交集时,有多种方法可以实现。下面将介绍几种常见的方式。
1. 使用Java 8的Stream API
Java 8引入了Stream API,它提供了一种声明式的方式来处理数据。
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); } }
这段代码首先创建了两个 List
对象 list1
和 list2
。然后,通过 list1.stream()
获取 list1
的Stream对象,并使用 filter
方法筛选出同时存在于 list2
中的元素。最后,使用 collect
方法将结果转换回 List
对象。
2. 使用Java的retainAll方法
retainAll
方法是 Collection
接口的一部分,它可以用来保留在指定集合中也存在的元素。不过,retainAll
方法会直接修改调用它的集合,因此在使用前需要创建一个副本。
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); } }
这段代码创建了两个 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)
如果说你的数据量很大,或者你的机器有多个处理器核心,你可以考虑使用并行流来加速交集的计算。
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());
注意:大数据量下,会比较适合使用并行流
5.使用传统的for循环遍历
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
集合交集的几种方式。你可以根据具体需求和使用的库来选择合适的方法。
到此这篇关于Java List集合取交集的五种常见方式的文章就介绍到这了,更多相关Java List集合取交集内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!