使用 Stream 进行数据转换

Java 中的输入/输出与流

Alex Liu

Software Development Engineer

使用 Stream 进行数据转换

  • 使用 streams 进行数据转换

    • 转换数据格式,聚合与过滤信息
    • 将结果存入新的集合类型(如从 ListSet
    • 支持的集合:
      • 列表(如 ArrayListLinkedList
      • 集合(如 HashSetTreeSet
      • 映射(Keys/Values 作为 Streams)(如 HashMapTreeMap
      • 数组(通过 Arrays.stream()
  • 之后示例使用名为 namesArrayList

    names: ["Alice", "Bob", "Charlie", "David"]
    
Java 中的输入/输出与流

使用 Stream 转换元素

  • 预备:导入所需的 SetCollectorsStream
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;

// 将之前创建的 `ArrayList` `names` 转为 `Stream` Stream<String> namesStream = names.stream();
  • 当前数据:[Alice, Bob, Charlie, David]
Java 中的输入/输出与流

使用 Stream 转换元素(续)

// 使用 `.map()` 将每个元素转为大写
Stream<String> upperCaseNameStream = namesStream.map(
        name -> name.toUpperCase())
  • 当前数据:[ALICE, BOB, CHARLIE, DAVID]
// 使用 `.collect()` 与 `Collectors.toSet()` 存储转换后的流数据
upperCaseNameStream.collect(Collectors.toSet())
  • 最终数据:
    {CHARLIE, ALICE, BOB, DAVID}
    
Java 中的输入/输出与流

使用 Stream 进行聚合

  • .reduce() 方法

    • 将元素"聚合"为单一结果
    • 适用于求和、拼接或求最小/最大值
  • 使用 .reduce() 需要两个输入

    • 初始值:累加起点,如 0
    • 二元运算符:接收两个参数的函数
      • (x, y) -> x + y 表示:
        • x:当前累计值
        • y:当前处理的元素
        • y 加到 x,直到处理完所有元素
Java 中的输入/输出与流

使用 Stream 进行聚合:示例

  • ArrayList names 转为 Stream 对象
    Stream<String> stream = names.stream();
    
  • 使用 .map() 将姓名转为长度,并用 .reduce() 求和
    stream
      .map(name -> name.length())
      .reduce(0, (sum, length) -> sum + length);
    
  • 结果:20
Java 中的输入/输出与流

Let's practice!

Java 中的输入/输出与流

Preparing Video For Download...