流(stream)
在类库中议添加新的 流java.util.stream.Stream
以便进行聚集(aggregation)操作
其中,Stream<T>
代表对象引用,此外还有一系列特化(specialization)流,比如IntStream
代表整形数字流
流的操作可以被组合成 流水线(pipeline)
例如:
shapes.stream()
.filter(s -> s.getColor() == BLUE)
.forEach(s -> s.setColor(RED));
在 Collection
上调用 stream()
会生成该集合元素的流视图(stream view);
filter()
过滤,产生只包含蓝色的流;
forEach()
遍历,并操作设置为红色。
流水线既可以串行执行也可以并行执行,并行或串行是流的属性。
除非显示要求使用并行流,否则JDK总会返回串行流。(串行流可以通过parallel()
方法被转化为并行流)
流的特性有两个 :
- 惰性
- 缓存
(1)惰性
Stream
具有天然的惰性——仅按需生产。
即,它就好比一个无限序列,只有在你要求的时候才会生产值,且值生产只要求的值。
暗含意思:“我可以给你是所有想要的东西!!”
(2)缓存
流的另外一个特性:它们记住(memoize)它们已经生成的值。
其实就是:缓存啦~~~ 哈哈哈!!
当流按需产生了一个新值时,它将会在返回该值之间缓存它。