返回

Stream 操作大集合,原来只有两大类

后端

我们之前关于 Java 集合框架的文章中曾提到过 Stream 操作,本文将深入解析这些操作。Stream 提供的操作繁多,但归根结底只有两大类:

  1. 中间操作 :对 Stream 进行处理并返回新 Stream,不影响原始 Stream。如 filter()map()sorted()

  2. 终端操作 :从 Stream 中获取结果并关闭 Stream。如 forEach()collect()count()

让我们一一探讨这些操作:

1. 中间操作

  • filter(Predicate<? super T> predicate) :根据谓词过滤 Stream 元素。
  • map(Function<? super T, ? extends R> mapper) :将每个元素映射到新值。
  • sorted(Comparator<? super T> comparator) :根据比较器对元素排序。
  • distinct() :去除重复元素。
  • limit(long maxSize) :限制 Stream 的大小。
  • skip(long n) :跳过前 n 个元素。

2. 终端操作

  • forEach(Consumer<? super T> action) :对每个元素执行操作。
  • collect(Collector<? super T, A, R> collector) :将元素收集到容器中。
  • count() :统计元素数量。
  • min(Comparator<? super T> comparator) :返回最小元素。
  • max(Comparator<? super T> comparator) :返回最大元素。
  • reduce(BinaryOperator<T> accumulator) :将元素归约为单个值。

实战案例

List<String> names = Arrays.asList("John", "Jane", "Bob", "Alice");

// 中间操作:过滤名称长度大于 3 的名称
Stream<String> filteredNames = names.stream()
    .filter(name -> name.length() > 3);

// 终端操作:将过滤后的名称收集到新列表
List<String> longNames = filteredNames.collect(Collectors.toList());

通过了解 Stream 操作的这两大类,您可以轻松地理解和使用 Stream API 的强大功能。