Java8中List取交集和差集

在Java编程中,我们经常需要对集合进行操作,比如取两个List的交集或者差集。Java8为我们提供了一些便利的方法来处理这些问题。本文将介绍如何使用Java8中的Stream API和Lambda表达式来进行List的交集和差集运算。

Stream API简介

Java8引入了Stream API,它是对集合对象进行操作的一种新方式。通过Stream API,我们可以对集合进行过滤、映射、排序等操作,更加方便、灵活地处理数据。

Stream API主要分为两种操作:中间操作(intermediate operation)和终端操作(terminal operation)。中间操作会返回一个新的Stream对象,而终端操作会对Stream进行最终的操作,比如汇总、转换成List等。

List取交集

假设现在有两个List,我们需要取它们的交集,即两个List中共同的元素。在Java8中,我们可以使用Stream的filter和collect方法来实现这个功能。

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class ListIntersection {
    public static void main(String[] args) {
        List<Integer> list1 = new ArrayList<>();
        list1.add(1);
        list1.add(2);
        list1.add(3);

        List<Integer> list2 = new ArrayList<>();
        list2.add(2);
        list2.add(3);
        list2.add(4);

        List<Integer> intersection = list1.stream()
                .filter(list2::contains)
                .collect(Collectors.toList());

        System.out.println("Intersection of list1 and list2: " + intersection);
    }
}

上面的代码中,我们首先创建了两个List对象list1和list2,然后使用Stream的filter方法过滤出list1中包含在list2中的元素,最后通过collect方法将结果收集到一个新的List中。运行上述代码,会输出交集中的元素[2, 3]。

List取差集

除了取交集,有时候我们也需要取两个List的差集,即取出list1中不包含在list2中的元素。同样使用Stream API和Lambda表达式,我们可以很方便地实现这个功能。

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class ListDifference {
    public static void main(String[] args) {
        List<Integer> list1 = new ArrayList<>();
        list1.add(1);
        list1.add(2);
        list1.add(3);

        List<Integer> list2 = new ArrayList<>();
        list2.add(2);
        list2.add(3);
        list2.add(4);

        List<Integer> difference = list1.stream()
                .filter(e -> !list2.contains(e))
                .collect(Collectors.toList());

        System.out.println("Difference of list1 and list2: " + difference);
    }
}

在上面的代码中,我们使用filter方法过滤出list1中不包含在list2中的元素,然后通过collect方法收集到一个新的List中。运行上述代码,会输出差集中的元素[1]。

类图

classDiagram
    ListIntersection --|> ArrayList
    ListDifference --|> ArrayList

以上是ListIntersection和ListDifference类与ArrayList类的关系。

总结

通过本文的介绍,我们了解了如何使用Java8中的Stream API和Lambda表达式来取两个List的交集和差集。Stream API提供了一种更加灵活、便捷的方式来处理集合对象,可以帮助我们更高效地进行数据操作。希望本文对您有所帮助,感谢阅读!