Java 8 判断一个 List 元素是否完全包含在另一个 List 中

在 Java 编程中,我们经常需要判断一个列表(List)中的元素是否完全包含在另一个列表中。Java 8 引入了新的 Stream API,使得对集合的操作更加简洁和高效。本文将介绍如何使用 Java 8 的 Stream API 来实现这一功能,并提供相应的代码示例。

旅行图

在开始编写代码之前,我们先通过一个旅行图来了解整个流程:

journey
  title 判断 List 元素包含关系
  section 准备阶段
    step 准备两个 List 对象
    step 检查 List 是否为空
  section 判断阶段
    step 使用 Stream API 进行判断
    step 返回结果
  section 结果展示
    step 显示判断结果

代码示例

假设我们有两个 List 对象,list1list2,我们想要判断 list1 中的所有元素是否都存在于 list2 中。以下是使用 Java 8 Stream API 实现的示例代码:

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

public class ListContainmentCheck {
    public static void main(String[] args) {
        List<String> list1 = List.of("apple", "banana", "cherry");
        List<String> list2 = List.of("banana", "cherry", "apple", "date");

        boolean isContained = isListContained(list1, list2);
        System.out.println("List1 is contained in List2: " + isContained);
    }

    public static boolean isListContained(List<?> list1, List<?> list2) {
        if (list1 == null || list2 == null || list1.isEmpty()) {
            return false;
        }

        return list1.stream().allMatch(list2::contains);
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
代码解析
  1. 导入必要的类:首先,我们导入了 ListCollectors 类,这两个类是 Java 8 Stream API 的一部分。

  2. 创建 List 对象:在 main 方法中,我们创建了两个 List 对象 list1list2

  3. 调用判断方法:我们调用 isListContained 方法,传入 list1list2 作为参数。

  4. 判断方法实现

    • 首先,我们检查两个 List 是否为空或为 null。如果是,直接返回 false
    • 使用 list1.stream() 创建一个 Stream,然后使用 allMatch 方法进行判断。allMatch 方法接受一个 Predicate,如果 Stream 中的所有元素都满足该 Predicate,就返回 true,否则返回 false
    • 在这里,我们使用 list2::contains 作为 Predicate,即检查 list1 中的每个元素是否都包含在 list2 中。
  5. 输出结果:最后,我们将判断结果输出到控制台。

结语

通过本文的介绍和代码示例,我们可以看到,使用 Java 8 的 Stream API 可以非常方便地实现 List 元素的包含关系判断。这种方法不仅代码简洁,而且易于理解和维护。希望本文对您有所帮助,如果您有任何问题或建议,请随时与我们联系。