使用 Java Stream 过滤出一个 List 包含另一个 List 的实现指南

在现代Java开发中,Stream API 是一种强大且灵活的工具,能够极大地简化集合数据的处理方式。本文将教会你如何使用 Java Stream 过滤出一个 List 中包含的元素,这里的目标是实现一个从 listA 中筛选出同时存在于 listB 中的元素。

整体流程

为此,我们将以下列步骤进行演示:

步骤描述代码示例
1创建两个 ListList<String> listA;
2使用 Java Stream 过滤 ListlistA.stream().filter(...)
3Collecting 结果collect(Collectors.toList());

步骤详解

步骤 1: 创建两个 List

首先,我们需要创建两个 List:listAlistBlistA 是我们要过滤的集合,listB 是用来进行过滤的集合。

下面是定义这两个 List 的代码示例:

import java.util.Arrays;
import java.util.List;

public class ListFilter {
    public static void main(String[] args) {
        // 创建 listA 和 listB
        List<String> listA = Arrays.asList("apple", "banana", "orange", "grape");
        List<String> listB = Arrays.asList("banana", "kiwi", "grape");
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
步骤 2: 使用 Java Stream 过滤 List

接下来,使用 Stream API 对 listA 进行过滤,以找出那些在 listB 中也存在的元素。

下面是实现这一功能的代码示例:

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

public class ListFilter {
    public static void main(String[] args) {
        List<String> listA = Arrays.asList("apple", "banana", "orange", "grape");
        List<String> listB = Arrays.asList("banana", "kiwi", "grape");
        
        // 使用 Java Stream 过滤出 listA 中包含在 listB 的元素
        List<String> filteredList = listA.stream() // 创建 listA 的流
            .filter(listB::contains) // 过滤出 listB 中包含的元素
            .collect(Collectors.toList()); // 收集结果到一个 List 中

        // 打印过滤后的结果
        System.out.println(filteredList); // 输出:[banana, grape]
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
关键代码注释
  • listA.stream(): 将 listA 转换为 Stream 对象,便于后续的流操作。
  • filter(listB::contains): 这个过滤条件检查每个元素是否存在于 listB 中,只有在这个条件为真时,元素才会被保留下来。
  • collect(Collectors.toList()): 将过滤后仍符合条件的元素收集回一个 List。

运行结果

运行上面的代码后,控制台将输出被过滤过的 listA,其仅包含在 listB 中的元素,即:

[banana, grape]
  • 1.

甘特图表示

接下来,我们使用 Mermaid 语法中的 Gantt 图来展示整个过程的时间安排。

使用 Java Stream 过滤 List 的步骤 2023-10-01 2023-10-01 2023-10-01 2023-10-01 2023-10-02 2023-10-02 2023-10-02 2023-10-02 2023-10-03 2023-10-03 2023-10-03 2023-10-03 2023-10-04 创建 listA 和 listB 过滤元素并收集结果 输出结果 创建 List 使用 Stream 过滤 打印结果 使用 Java Stream 过滤 List 的步骤

类图表示

为了便于理解我们代码的结构,我们也将其用类图表示出来。

ListFilter +main(String[] args) +void filterLists(List listA, List listB)

总结

在这篇文章中,我们详细讲解了如何使用 Java Stream 来从一个 List 中过滤出包含于另一个 List 的元素。通过两次重要的操作:首先将 List 转换为流(Stream),其次使用过滤(filter)和收集(collect)方法,我们成功实现了这个目标。这些技能对于任何新入行的开发者都是非常重要的,能够帮助他们高效地处理集合数据。

希望通过这篇文章,你对 Java Stream 有了更深入的理解,并能顺利运用到实际开发中!如果你还有疑问,别犹豫,随时问我!