Java 8 List 交集

在Java编程中,处理集合(List)是很常见的任务。有时我们需要找到两个列表中的共同元素,也就是它们的交集。在Java 8中,我们可以使用新的Stream API来轻松地实现这一目标。

Stream API

Java 8引入了Stream API,它是一种对集合数据进行操作的新方式。Stream API可以让我们非常方便地处理集合,包括对元素进行过滤、映射、排序和归约等操作。

首先,我们来看一个简单的示例,展示如何使用Stream API来计算两个列表的交集。

import java.util.ArrayList;
import java.util.List;

public class ListIntersectionExample {
    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)
                .toList();

        System.out.println("Intersection: " + intersection);
    }
}

在上面的示例中,我们创建了两个列表list1list2,它们分别包含一些整数。我们使用Stream API中的stream()方法将列表转换为一个流,然后使用filter()方法过滤掉不在list2中的元素。最后,我们使用新的toList()方法将结果转换回一个列表。

运行上面的代码,输出结果为:

Intersection: [2, 3]

Stream API 的其他用法

除了上面的示例,Stream API还提供了其他很多方便的操作,可以帮助我们更高效地处理集合数据。

映射

List<String> names = List.of("Alice", "Bob", "Charlie");
List<Integer> nameLengths = names.stream()
        .map(String::length)
        .toList();

System.out.println("Name lengths: " + nameLengths);

在上面的示例中,我们使用map()方法将字符串列表映射为它们的长度列表。输出结果为:

Name lengths: [5, 3, 7]

排序

List<Integer> numbers = List.of(3, 1, 4, 1, 5, 9, 2, 6, 5);
List<Integer> sortedNumbers = numbers.stream()
        .sorted()
        .toList();

System.out.println("Sorted numbers: " + sortedNumbers);

在上面的示例中,我们使用sorted()方法对整数列表进行排序。输出结果为:

Sorted numbers: [1, 1, 2, 3, 4, 5, 5, 6, 9]

归约

List<Integer> numbers = List.of(1, 2, 3, 4, 5);
int sum = numbers.stream()
        .reduce(0, Integer::sum);

System.out.println("Sum: " + sum);

在上面的示例中,我们使用reduce()方法将整数列表中的所有元素求和。输出结果为:

Sum: 15

总结

在本文中,我们介绍了Java 8中如何使用Stream API来计算两个列表的交集。通过使用Stream API,我们可以更方便地处理集合数据,包括对元素进行过滤、映射、排序和归约等操作。

希望本文对你理解Java 8中的List交集有所帮助!如有任何问题或意见,请随时提出。