📜  获取两个列表的交集java(1)

📅  最后修改于: 2023-12-03 15:41:27.286000             🧑  作者: Mango

获取两个列表的交集Java

在开发过程中,我们常常需要获取两个列表的交集。Java提供了多种方式来实现这个目标,本文将介绍其中的三种方法。

方法一:使用retainAll方法

Java的List接口提供了一个retainAll方法,该方法可以用于求两个列表的交集。

List<Integer> list1 = new ArrayList<>(Arrays.asList(1,2,3));
List<Integer> list2 = new ArrayList<>(Arrays.asList(3,4,5));
list1.retainAll(list2);
System.out.println(list1);

输出结果为:[3]

以上代码的含义是,先创建两个包含整数的列表list1和list2,然后使用retainAll方法获取它们的交集,并输出结果。

方法二:使用Stream API

Java 8引入了Stream API,该API提供了filter和collect方法来进行列表操作。使用Stream API可以非常方便地获取两个列表的交集。

List<Integer> list1 = new ArrayList<>(Arrays.asList(1,2,3));
List<Integer> list2 = new ArrayList<>(Arrays.asList(3,4,5));
List<Integer> intersection = list1.stream()
            .filter(list2::contains)
            .collect(Collectors.toList());
System.out.println(intersection);

输出结果为:[3]

以上代码的含义是,先创建两个包含整数的列表list1和list2,然后使用Stream API的filter和collect方法获取它们的交集,并输出结果。

方法三:使用Set

Java的Set接口提供了retainAll方法,该方法可以用于求两个集合的交集。因为列表实现了List接口,而List接口继承自Collection接口,而Set接口也继承自Collection接口,所以可以使用Set来获取列表的交集。

List<Integer> list1 = new ArrayList<>(Arrays.asList(1,2,3));
List<Integer> list2 = new ArrayList<>(Arrays.asList(3,4,5));
Set<Integer> set1 = new HashSet<>(list1);
Set<Integer> set2 = new HashSet<>(list2);
set1.retainAll(set2);
List<Integer> intersection = new ArrayList<>(set1);
System.out.println(intersection);

输出结果为:[3]

以上代码的含义是,先创建两个包含整数的列表list1和list2,然后将它们转换为包含相同元素的集合set1和set2,再使用Set的retainAll方法获取它们的交集并转换为列表,并输出结果。

以上三种方法均可用于获取两个列表的交集。具体选择哪一种方法取决于具体的场景和需求。