Java Stream API: 两个List取交集
在Java中,我们经常需要处理集合之间的操作,例如求交集、并集或差集。Java Stream API提供了一种简洁而高效的方式来处理这些操作。本文将介绍如何使用Java Stream API来取两个List的交集,并提供相应的代码示例。
什么是Java Stream API
Java Stream API是在Java 8中引入的一个新的API,用于处理集合数据。它提供了一种函数式编程的方式来对集合进行操作,使代码更加简洁和易于维护。Java Stream API可以用于过滤、映射、归约等各种操作,同时还支持并行处理,提高了代码的性能。
两个List取交集的实现
假设我们有两个List A和B,我们想要取它们的交集。使用Java Stream API可以很轻松地实现这个功能。
方法一:使用stream().filter()和contains()方法
我们可以使用stream().filter()方法来过滤出List A中与List B中相同的元素。代码示例如下:
import java.util.ArrayList;
import java.util.List;
public class ListIntersection {
public static void main(String[] args) {
List<Integer> listA = new ArrayList<>();
listA.add(1);
listA.add(2);
listA.add(3);
listA.add(4);
listA.add(5);
List<Integer> listB = new ArrayList<>();
listB.add(3);
listB.add(4);
listB.add(5);
listB.add(6);
listB.add(7);
List<Integer> intersection = listA.stream()
.filter(listB::contains)
.collect(Collectors.toList());
System.out.println("List A: " + listA);
System.out.println("List B: " + listB);
System.out.println("Intersection: " + intersection);
}
}
在上面的代码中,我们首先创建了两个List:listA和listB。然后,我们使用stream()方法将List A转换为一个流,然后使用filter()方法来过滤出与List B相同的元素。最后,我们使用collect()方法将过滤后的元素收集到一个新的List中。
方法二:使用retainAll()方法
除了使用filter()方法,我们还可以使用retainAll()方法来取两个List的交集。代码示例如下:
import java.util.ArrayList;
import java.util.List;
public class ListIntersection {
public static void main(String[] args) {
List<Integer> listA = new ArrayList<>();
listA.add(1);
listA.add(2);
listA.add(3);
listA.add(4);
listA.add(5);
List<Integer> listB = new ArrayList<>();
listB.add(3);
listB.add(4);
listB.add(5);
listB.add(6);
listB.add(7);
listA.retainAll(listB);
System.out.println("List A: " + listA);
System.out.println("List B: " + listB);
}
}
在上面的代码中,我们直接使用listA.retainAll(listB)来取两个List的交集。retainAll()方法会修改List A,使其只包含与List B相同的元素。
类图
下面是ListIntersection类的类图,使用mermaid语法表示:
classDiagram
class ListIntersection {
<<public>> +main(String[] args)
}
总结
在本文中,我们介绍了如何使用Java Stream API来取两个List的交集。我们提供了两种不同的实现方法,并提供了相应的代码示例。使用Java Stream API可以使代码更加简洁和易于理解,同时提高了代码的执行效率。希望本文能够帮助你理解Java Stream API的使用。