Stream流的中间方法和终结方法有哪些

奋斗的软件工程师 / 2024-02-03 / 原文

在Java 8及更高版本的Stream API中,Stream操作可以分为中间操作(Intermediate Operations)和终结操作(Terminal Operations)。下面是两类方法的一些常见示例:

中间操作(Intermediate Operations)
中间操作不会立即执行任何处理,而是返回一个新的Stream。这些操作可以链接起来形成一个流水线,只有当终端操作被执行时,流中的元素才会按照指定的方式进行处理。

  • filter(Predicate<? super T> predicate):过滤出满足条件的元素。
  • map(Function<? super T, ? extends R> mapper):将每个元素应用给定函数映射为新值。
  • flatMap(Function<? super T, ? extends Stream<? extends R>> mapper):对每个元素应用函数生成新的Stream,并将其扁平化到单个Stream中。
  • sorted()sorted(Comparator<? super T> comparator):对Stream中的元素进行排序。
  • distinct():去除重复元素,使得输出的Stream中没有重复的元素。
  • limit(long maxSize):限制Stream最多包含多少个元素。
  • skip(long n):跳过前n个元素,返回剩余元素的Stream。

终结操作(Terminal Operations)
终结操作会导致Stream的计算发生,一旦执行了终结操作,Stream就不能再被使用。终结操作会消费Stream并产生最终结果或副作用。

  • forEach(Consumer<? super T> action):对Stream中的每个元素执行提供的操作。
  • collect(Collector<? super T, A, R> collector):将Stream元素收集到特定的结果容器中,通常用于转换成集合、列表、数组等。
  • toArray():将Stream转换为数组。
  • reduce(BinaryOperator<T> accumulator):通过二元运算符从Stream中累积元素生成单一结果。
  • min(Comparator<? super T> comparator)max(Comparator<? super T> comparator):找到Stream中的最小或最大元素。
  • count():返回Stream中元素的数量。
  • anyMatch(Predicate<? super T> predicate)allMatch(Predicate<? super T> predicate)noneMatch(Predicate<? super T> predicate):检查Stream是否至少有一个元素匹配给定条件、所有元素都匹配条件或没有任何元素匹配条件。

这些是Stream API中最为常用的中间和终结操作,实际上API中还有更多其他的方法可以根据需要选择使用。****