流简介

Java 中的输入/输出与流

Alex Liu

Software Development Engineer

使用 Streams 进行处理

  • Java Streams

    • 以函数式方式处理集合,并提升大数据的性能
    • 支持的集合:
      • 列表(如 ArrayListLinkedList
      • 集合(如 HashSetTreeSet
      • 映射(Keys/Values 作为 Streams)(如 HashMapTreeMap
      • 数组(通过 Arrays.stream()
  • 余下示例使用名为 namesArrayList

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

在 Stream 中使用 lambda 表达式

  • Lambda 表达式
    • 语法:(parameters) -> { expression }
names.forEach(
    // `name` is a parameter representing each element in the list
    name -> 
        // This is the expression executed for each element.
        System.out.println(name));
Alice 
Bob 
Charlie 
David
Java 中的输入/输出与流

创建 Stream

  • 将集合转换为 Stream

    • 在集合上使用 .stream()
    • 支持 ListSetQueue
  • 导入 Stream

    import java.util.stream.Stream;
    
  • 将示例列表 names 转为流,并用 .foreach() 访问每个元素
    Stream<String> stream = names.stream();
    stream.forEach(name -> System.out.println(name));
    
Java 中的输入/输出与流

用 Streams 过滤数据

  • .filter() 选择元素
    • 仅保留匹配项
  • 将示例列表 names 转为流
    Stream<String> stream = names.stream();
    
  • .filter() 匹配以 A 开头的元素,并用 .forEach() 打印
    stream
      .filter(name -> name.startsWith("A"))
      .forEach(name -> System.out.println(name));
    
  • 过滤结果:Alice
Java 中的输入/输出与流

用 Streams 统计元素

  • .count() 统计元素数

    • 返回 long
  • 将示例列表 names 转为流

    Stream<String> stream = names.stream();
    
  • .filter() 匹配以 B 开头的元素,并用 .count() 计数

    long count = names.stream()
      .filter(name -> name.startsWith("B"))
      .count();
    
  • 计数结果:1(只有 BobB 开头)

Java 中的输入/输出与流

何时使用 Streams

  • 何时使用 Streams
    • 大数据集:降低开销
    • 函数式操作:比循环更易读
    • 过滤与转换:简化代码
  • 何时不应使用 Streams
    • 需要修改原集合
    • 带副作用的简单循环
Java 中的输入/输出与流

Passons à la pratique !

Java 中的输入/输出与流

Preparing Video For Download...