使用 Java 泛型将 Set 转换为 Stream 的程序

13 2025年5月 | 阅读 3 分钟

Java 中的 Set 是一个包含唯一元素的集合,而 Stream 则有效地执行过滤、映射和归约数据等功能性任务。将 Set 转换为 Stream 可以使用 Stream API 轻松地处理其元素,Stream API 是在 Java 8 中引入的。我们可以使用泛型来设计一个可重用的方法,该方法可以与任何类型的 Set 一起工作,同时保持类型安全和灵活性。

什么是 Set?

Java Set 是 java.util 包的一部分,并扩展了 java.util.Collection 接口。它允许使用重复的元素,并且只能处理一个 null 元素。

什么是 Stream?

Stream 是一个支持各种方法的对象集合,并且可以进行管道操作以获得所需的结果。

有两种方法可以将 Set 转换为 Stream:

  1. 使用 Collection.Stream() 方法
  2. 使用 Predicate

方法 1:使用 Collection.stream() 方法

在此方法中,使用 Collection.stream() 将 Set 直接转换为 Stream。

算法

步骤 1: 创建一个接受 Set 作为输入的方法,其中 T 是任何 数据类型

步骤 2: 确保该方法返回一个 Stream,以便进行灵活的数据处理。

步骤 3: 在 Java 8 中使用 .stream() 方法将 Set 转换为 Stream

步骤 4: 声明并初始化一个具有任何数据类型的 Set(例如,整数字符串)。

步骤 5: 使用泛型方法获取 Set 的 Stream 表示。

步骤 6: 将 Stream 转换为 数组或使用任何 Stream 操作(如过滤和映射)。

步骤 7: 打印结果以确保转换成功。

输出

 
The Set of Integer are: [1, 3, 4, 5, 9, 10]
The Stream of Integer are: [1, 3, 4, 5, 9, 10]   

方法 2:使用 Predicate

此方法使用 filter(Predicate) 方法返回满足给定谓词条件的元素的流。Functional Interface Predicate 在 java.util.Function 包中指定,以便它可以用作 lambda 表达式或方法引用的赋值目标。它提高了代码的可管理性,并有助于单独进行单元测试。

算法

步骤 1: 创建并初始化一个包含多个字符串成员的 Set。

步骤 2: 在应用任何过滤器之前打印 Set 元素。

步骤 3: 定义一个 Predicate,用于确定字符串是否以字母 'J' 开头。

步骤 4: 创建一个接受 Set 和 Predicate 作为输入的函数。

步骤 4: 调用转换函数,并将 Set 和 Predicate 作为参数传递。存储由此产生的过滤后的 Stream。

步骤 5: 将 Set 转换为 Stream。

步骤 6: 使用 Predicate 从 Stream 中过滤元素。

步骤 7: 返回过滤后的 Stream。

步骤 8: 将 Stream 转换为数组,以便更容易显示。

步骤 9: 打印满足给定条件的过滤后的元素。

输出

 
A set that contains a collection of strings are: [Jasmin, Programming, Website, JavaTpoint, follow, Good]
The stream from the set that starting with the 'J' are: 
[Jasmin, JavaTpoint]