以下是您提供的 10 个 Java Stream API 程序示例的执行说明和核心要点。
1. 基础 Stream 操作示例 (Listing 1)
- 功能:演示
Stream的基础操作,包括获取流、使用min()/max()查找极值、sorted()排序、filter()过滤以及forEach()终端操作 。 - 执行:运行
StreamDemo类的main方法。输出将依次显示:Original list: [7, 18, 10, 24, 17, 5]Minimum value: 5Maximum value: 24Sorted stream: 5 7 10 17 18 24Odd values: 5 7 17Odd values greater than 5: 7 17
2. reduce() 归约操作示例 (Listing 2)
- 功能:演示
reduce()方法的两种用法:一种返回Optional<T>(用于可能为空的结果),另一种提供初始值(identity)并返回确定类型的结果 。 - 执行:运行
StreamDemo2类的main方法。输出将显示:Product as Optional: 2570400Product as int: 2570400
3. 并行流与组合器 reduce() 示例 (Listing 3)
- 功能:演示在并行流 (
parallelStream()) 中使用三参数reduce()方法,其中第三个参数combiner用于合并并行计算的部分结果 。 - 执行:运行
StreamDemo3类的main方法。输出将显示:Product of square roots: 153.246...(具体数值取决于计算精度)
4. map() 映射操作示例 (Listing 4)
- 功能:演示
map()中间操作,将流中的每个元素(Double)通过函数(计算平方根)转换为新元素,生成一个新的流 。 - 执行:运行
StreamDemo4类的main方法。输出将显示:Product of square roots is 153.246...(与 Listing 3 结果一致,但使用顺序流和map实现)
5. map() 提取对象属性示例 (Listing 5)
- 功能:演示使用
map()将一种对象流 (NamePhoneEmail) 映射为另一种对象流 (NamePhone),实现数据投影或转换 。 - 执行:运行
StreamDemo5类的main方法。输出将显示原始列表和仅包含姓名与电话的新列表。
6. 映射到特定类型流示例 (Listing 6)
- 功能:演示
mapToInt()等特化映射操作,将Stream<Double>转换为IntStream,常用于提高数值计算的性能 。 - 执行:运行
StreamDemo6类的main方法。输出将显示原始列表和每个元素向上取整 (Math.ceil) 后的整数值。
7. collect() 收集操作示例 (Listing 7)
- 功能:演示使用
collect()终端操作配合Collectors.toList()和Collectors.toSet(),将流中的元素收集到List或Set集合中 。 - 执行:运行
StreamDemo7类的main方法。输出将显示收集到List和Set中的姓名与电话信息。
8. 使用迭代器遍历流示例 (Listing 8)
- 功能:演示如何通过
iterator()方法获取流的迭代器 (Iterator),以传统方式遍历流中的元素 。 - 执行:运行
StreamDemo8类的main方法。输出将按顺序打印列表中的所有字符串。
9. 使用 Spliterator 遍历流示例 (Listing 9)
- 功能:演示使用
spliterator()方法获取流的可拆分迭代器 (Spliterator),并使用tryAdvance()方法遍历元素 。 - 执行:运行
StreamDemo9类的main方法。输出将按顺序打印列表中的所有字符串,功能与Iterator类似。
10. Spliterator分割示例 (Listing 10)
- 功能:演示
Spliterator的trySplit()方法,该方法尝试将迭代器分割成两部分,以支持并行处理 。 - 执行:运行
StreamDemo10类的main方法。输出将分为两部分,分别来自原Spliterator分割后产生的两个部分。
参考来源
- Java 8 Stream 终端操作大揭秘:代码示例带你轻松掌握
- java8 stream流操作
- Java 8 Stream Api 中的 map和 flatMap 操作
- java 8 Stream中操作类型和peek的使用
- 怎么break java8 stream的foreach