三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Java Stream核心操作精讲

Java Stream核心操作精讲

以下是您提供的 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: 5
    • Maximum value: 24
    • Sorted stream: 5 7 10 17 18 24
    • Odd values: 5 7 17
    • Odd values greater than 5: 7 17

2. reduce() 归约操作示例 (Listing 2)

  • 功能:演示reduce()方法的两种用法:一种返回Optional<T>(用于可能为空的结果),另一种提供初始值(identity)并返回确定类型的结果 。
  • 执行:运行StreamDemo2类的main方法。输出将显示:
    • Product as Optional: 2570400
    • Product 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(),将流中的元素收集到ListSet集合中 。
  • 执行:运行StreamDemo7类的main方法。输出将显示收集到ListSet中的姓名与电话信息。

8. 使用迭代器遍历流示例 (Listing 8)

  • 功能:演示如何通过iterator()方法获取流的迭代器 (Iterator),以传统方式遍历流中的元素 。
  • 执行:运行StreamDemo8类的main方法。输出将按顺序打印列表中的所有字符串。

9. 使用 Spliterator 遍历流示例 (Listing 9)

  • 功能:演示使用spliterator()方法获取流的可拆分迭代器 (Spliterator),并使用tryAdvance()方法遍历元素 。
  • 执行:运行StreamDemo9类的main方法。输出将按顺序打印列表中的所有字符串,功能与Iterator类似。

10. Spliterator分割示例 (Listing 10)

  • 功能:演示SpliteratortrySplit()方法,该方法尝试将迭代器分割成两部分,以支持并行处理 。
  • 执行:运行StreamDemo10类的main方法。输出将分为两部分,分别来自原Spliterator分割后产生的两个部分。

参考来源

  • Java 8 Stream 终端操作大揭秘:代码示例带你轻松掌握
  • java8 stream流操作
  • Java 8 Stream Api 中的 map和 flatMap 操作
  • java 8 Stream中操作类型和peek的使用
  • 怎么break java8 stream的foreach
← 返回列表