4-流的基本介绍
流是什么
JDK1.8引入的新成员,以声明式方式处理集合数据.
将基础操作链接起来,完成复杂的数据处理流水线.
提供透明的并行处理.
流的简介
从支持数据处理操作的源生成的元素序列.
数据处理操作:流的数据处理功能类似于数据库的操作.以及函数式编程语言的常用操作.如filter,map,reduce,find,match,sort等.流操作可以顺序执行,也可并行执行.
源:流会使用一个提供数据的源,这些源可以是数组,集合,或输入输出资源.注意:从有序集合生成的流会保留原有顺序,由列表生成的流,其顺序也与列表一致.
元素序列:就像集合一样,提供了一个接口,可以访问特定元素的一组有序值.因为集合是数据结构,所以它的主要目的是以特定的时间/空间复杂度来存储访问元素.但流的目的在于表达计算.
流与集合的区别
时间与空间:集合是空间的元素存储.流是时间维度的元素生成.
流只能遍历一次.
与使用迭代器对集合进行显示迭代不同,流的迭代都是在背后进行的.
流的组成
数据源---->中间操作---->终端操作
流操作分类
中间操作(Intermediate)
无状态操作: filter/map/peek等
有状态操作: dictinct/sorted/limit等
终端操作(Terminal)
非短路操作: forEach/collect/count等
短路操作: anyMatch/findFirst/findAny等
流的使用
| 中间操作(无状态) | 中间操作(有状态) |
终端操作(短路) |
终端操作(非短路) |
|
过滤(filter) 映射(map) 扁平化(flatMap) 遍历(peek) |
去重(distinct) 跳过(skip) 截断(limit) 排序(sorted) |
所有匹配(allMatch) 任意匹配(anyMatch) 不匹配(noneMatch) 查找首个(findFirst) 查找任意(findAny) |
遍历(forEach) 归约(reduce) 最大值(max) 聚合(collect) 最小值(min) 计数(count) |

浙公网安备 33010602011771号