返回

Java 中的 Stream:入门指南

后端

在Java中,Stream(流)是一种用于操作集合(Collection)、数组等数据源的API。它提供了一种功能强大且表达力高的编程模型,可以用更简洁、更具可读性的方式处理数据。Stream的主要

引言

Java 8 引入了 Stream API,为处理数据集合提供了一种更具表达力、更简洁的途径。Stream 是一个抽象概念,代表一个数据元素序列,这些元素可以从各种来源获取,例如集合、数组甚至 I/O 源。

Stream 的优势

  • 懒计算: Stream 操作不会立即执行,而是创建一系列延迟操作,只有在需要时才执行。这使得 Stream 非常高效,特别是对于大数据集。
  • 可组合性: Stream API 提供了许多中间操作,可以轻松组合起来创建复杂的数据处理管道。这些操作可以对 Stream 中的元素进行筛选、映射、排序和其他转换。
  • 表达性: Stream 操作使用直观的方法调用来表示,这使得代码更加简洁易读,从而减少了认知开销。

创建 Stream

可以通过以下几种方式创建 Stream:

  • 从集合创建: Collection.stream()
  • 从数组创建: Arrays.stream()
  • 从 I/O 源创建: Files.lines()BufferedReader.lines()

中间操作

中间操作用于转换 Stream 中的元素,创建新的 Stream。它们不立即改变源 Stream,而是返回一个新的 Stream,其中包含转换后的元素。常见的中间操作包括:

  • filter(): 筛选元素
  • map(): 映射元素
  • sorted(): 对元素进行排序
  • distinct(): 删除重复元素

终端操作

终端操作用于对 Stream 中的元素执行最终操作,并返回一个结果。它们消耗 Stream,并且不能返回一个新的 Stream。常见的终端操作包括:

  • forEach(): 对每个元素执行操作
  • reduce(): 将元素归约为单个值
  • collect(): 将元素收集到集合或其他数据结构

示例

以下示例演示了如何使用 Stream 查找并打印一个集合中所有大于 10 的数字:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 11, 12, 13);

numbers.stream()
        .filter(n -> n > 10)
        .forEach(System.out::println);

结论

Java Stream API 提供了一种强大且直观的方式来处理数据集合。它基于懒计算和可组合性的理念,使代码更简洁、更具可读性,同时还能优化数据处理任务的性能。掌握 Stream API 可以显著提高 Java 程序员的生产力和代码质量。