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的使用。