Java8 Stream —— 更丝滑的集合操作方式
1.概念
stream是一种可供流式操作的数据视图有些类似数据库中视图的概念它不改变源数据集合如果对其进行改变的操作它会返回一个新的数据集合。
总的来讲它有三大特性:在之后我们会对照着详细说明
1、stream不存储数据
2、stream不改变源数据
3、stream的延迟执行特性
2.优点
1、代码简洁,函数式编程写出的代码简洁且意图明确,使用stream接口让你从此告别for循环。
2、多核友好,java函数式编程使得编写并行程序从未如此简单,你需要的全部就是调用一下parallel()
方法。
3.stream api常用方法
stream操作分类 | ||
中间操作(intermediate operations) | 无状态(stateless) | unordered() filter() map() maptoint() maptolong() maptodouble() flatmap() flatmaptoint() flatmaptolong() flatmaptodouble() peek() |
有状态(stateful) | distinct() sorted() sorted() limit() skip() | |
结束操作(terminal operations) | 非短路操作 | foreach() foreachordered() toarray() reduce() collect() max() min() count() |
短路操作(short-circuiting) | anymatch() allmatch() nonematch() findfirst() findany() |
filter:过滤流,过滤流中的元素,返回一个符合条件的stream
map:转换流,将一种类型的流转换为另外一种流。(maptoint、maptolong、maptodouble 返回int、long、double基本类型对应的stream)
flatmap:简单的说,就是一个或多个流合并成一个新流。(flatmaptoint、flatmaptolong、flatmaptodouble 返回对应的intstream、longstream、doublestream流。)
distinct:返回去重的stream。
sorted:返回一个排序的stream。
peek:主要用来查看流中元素的数据状态。
limit:返回前n个元素数据组成的stream。属于短路操作
skip:返回第n个元素后面数据组成的stream。
结束操作
foreach: 循环操作stream中数据。
toarray: 返回流中元素对应的数组对象。
reduce: 聚合操作,用来做统计。
collect: 聚合操作,封装目标数据。
min、max、count: 聚合操作,最小值,最大值,总数量。
anymatch: 短路操作,有一个符合条件返回true。
allmatch: 所有数据都符合条件返回true。
nonematch: 所有数据都不符合条件返回true。
findfirst: 短路操作,获取第一个元素。
findany: 短路操作,获取任一元素。
foreachordered: 暗元素顺序执行循环操作。