您的位置:首页 > 健康 > 美食 > Java List集合取交集的五种常见方式总结

Java List集合取交集的五种常见方式总结

2025/5/10 3:33:31 来源:https://blog.csdn.net/weixin_45336946/article/details/141422330  浏览:    关键词:Java 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);}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com