首页 > 技术文章 > Java8新特性:Stream介绍和总结

drl-blogs 2019-05-02 20:25 原文

什么式Stream

流(Stream)是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。
集合讲的是数据,流讲的是计算
注意:

  1. Stream自己不会存储元素
  2. Stream不会改变源对象。相反,他会返回一个持有结果的新Stream
  3. Stream操作是延迟执行的。意味着他会等到需要结果的时候才执行

Stream操作的三个步骤

  • 创建Stream
    一个数据源(如:集合、数组),获取一个流
  • 中间操作
    一个中间操作链,对数据源的数据进行处理
  • 终止操作(终端操作)
    一个终止操作,执行中间操作链。并产生结果

示意图如下:
在这里插入图片描述

创建Stream

  1. default Stream<E> stream():返回一个顺序流
  2. default Stream<E> parallelStream():返回一个并行流
有数组创建流

static <T> Stream<T> stream(T[] array):返回一个流

由值创建流

public static<T> Stream<T> of(T… values):返回一个流

由函数创建流:创建无限流
  • 迭代

public static<T> Stream<T> iterate(final T seed,final UnaryOperator<T> f)

  • 生成

public static<T> Stream<T> generate(Supplier<T> s)

Stream的中间操作

多个中间操作可以连接起来形成一个流水线,除非流水线上触发终止操作,否则中间操作不会执行任何处理!而在终止操作时一次性全部处理,称为“惰性求值”
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Stream的终止操作

终止操作会从流的流水线生成结果。其结果可以是任何不是流的值,例如List、Integer 甚至是void。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Collector接口中方法的实现决定了如何对流执行收集操作(如收集到List、Set、Map)。但是Collector实用类提供了很多静态方法可以方便的收集常见实例
在这里插入图片描述
在这里插入图片描述

推荐阅读