java8的Stream

Stream

Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。

Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。

Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。

这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。

元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。

中间操作

  • filter(Predicate<T> predicate): 过滤满足条件的元素。
  • map(Function<T, R> mapper): 映射元素到另一种类型。
  • flatMap(Function<T, Stream<R>> mapper): 将每个元素映射成一个流,并将多个流扁平化为一个流。
  • distinct(): 去除重复的元素。
  • sorted(): 对元素进行自然顺序排序。
  • sorted(Comparator<T> comparator): 使用自定义比较器对元素进行排序。
  • peek(Consumer<T> action): 在处理每个元素时执行一些操作,但不改变流中的元素。

终端操作

  • forEach(Consumer<T> action): 对每个元素执行操作。
  • toArray(): 将流中的元素收集到数组中。
  • collect(Collector<T, A, R> collector): 将元素收集到一个集合或数据结构中。
  • reduce(T identity, BinaryOperator<T> accumulator): 使用给定的初始值和累加函数,将流中的元素归约为一个值。
  • min(Comparator<T> comparator): 返回流中的最小元素。
  • max(Comparator<T> comparator): 返回流中的最大元素。
  • count(): 返回流中元素的个数。
  • anyMatch(Predicate<T> predicate): 检查是否有元素满足条件。
  • allMatch(Predicate<T> predicate): 检查是否所有元素都满足条件。
  • noneMatch(Predicate<T> predicate): 检查是否没有元素满足条件。
  • findFirst(): 返回流中的第一个元素。
  • findAny(): 返回流中的任意一个元素。

其他操作

  • concat(Stream<T> a, Stream<T> b): 将两个流合并为一个流。
  • iterate(T seed, UnaryOperator<T> f): 生成一个无限流,以指定的初始值和递增函数生成序列。
  • generate(Supplier<T> s): 生成一个无限流,使用提供的供应商生成元素。

java8的Stream
http://hanqichuan.com/2023/08/23/java/java8的Stream/
作者
韩启川
发布于
2023年8月23日
许可协议