JavaStream
JavaStream
Stream
Stream(流)是一个来自数据源的元素队列并支持聚合操作
- 元素是特定类型的对象,形成一个队列。 Java中的Stream并不会存储元素,而是按需计算。
- 数据源 流的来源。 可以是集合,数组,I/O channel, 产生器generator 等。
- 聚合操作 类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sorted等。
Stream还有两个特征
- Pipelining: 中间操作都会返回流对象本身。 这样多个操作可以串联成一个管道, 如同流式风格(fluent style)。 这样做可以对操作进行优化, 比如延迟执行(laziness)和短路( short-circuiting)。
- 内部迭代: 以前对集合遍历都是通过Iterator或者For-Each的方式, 显式的在集合外部进行迭代, 这叫做外部迭代。 Stream提供了内部迭代的方式, 通过访问者模式(Visitor)实现。
生成流
- stream() -为集合创建串行流。
- parallelStream() − 为集合创建并行流。
Stream.of()
从一堆对象中创建 Stream 流
数据处理
map
用于映射每个元素到对应的结果,可对当前元素进行数据处理
flatmap
将流的每个元素, 转换为其他对象的流,入参接受一个返回对象流的函数
filter(lamda表达式)
用于通过设置的条件过滤出元素(过滤条件对应的是留下的元素)
limit
用于获取指定数量的流
sorted
用于对流进行排序,可以传入Comparator参数控制排序顺序
distinct
用于消除流中的重复元素
isPrime()
用于检测是否是质数,是留下该元素
结束操作
forEach(Consumer)
遍历迭代流中的每个元素,无返回值
forEachOrdered(Consumer)
确保按照原始流的顺序执行。
collect(Collector)
使用
Collector
收集流元素到结果集合中
collect(Supplier, BiConsumer, BiConsumer)
收集流元素到结果集合中,第一个参数用于创建一个新的结果集合,第二个参数用于将下一个元素加入到现有结果合集中,第三个参数用于将两个结果合集合并
匹配
allMatch(Predicate)
:
如果流的每个元素根据提供的
Predicate
都返回 true 时,最终结果返回为 true。这个操作将会在第一个 false 之后短路,也就是不会在发生 false 之后继续执行计算。
anyMatch(Predicate)
:
如果流中的任意一个元素根据提供的
Predicate
返回 true 时,最终结果返回为 true。这个操作将会在第一个 true 之后短路,也就是不会在发生 true 之后继续执行计算。
noneMatch(Predicate)
:
如果流的每个元素根据提供的
Predicate
都返回 false 时,最终结果返回为 true。这个操作将会在第一个 true 之后短路,也就是不会在发生 true 之后继续执行计算。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 杨柳亭!