Stream流

  1. Stream
    1. 1,特性
    2. 2,串行流,并行流
    3. 3,Stream
    4. 4,说明

Stream

Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,

可以执行非常复杂的查找、过滤和映射数据等操作

1,特性

1,不是数据结构,不会保存数据。

2,不会修改原来的数据源,它会将操作后的数据保存到另外一个对象中。(保留意见:peek方法可以修改流中元素)

3,惰性求值,流在中间处理过程中,只是对操作进行了记录,并不会立即执行,需要等到执行终止操作的时候才会进行实际的计算

2,串行流,并行流

Java8 中,Collection 新增了两个流方法,分别是 Stream()parallelStream()

串行流(Stream):适合存在线程安全问题、阻塞任务、重量级任务,以及需要使用同一事务的逻辑。

并行流(parallelStream):适合没有线程安全问题、较单纯的数据处理任务。

简单区分stream是顺序流,由主线程按顺序对流执行操作,而parallelStream是并行流,内部以多线程并行执行的方式对流进行操作,但前提是流中的数据处理没有顺序要求。例如筛选集合中的奇数,两者的处理不同之处:

描述

如果流中的数据量足够大,并行流可以加快处速度。

除了直接创建并行流,还可以通过parallel()把顺序流转换成并行流:

Optional<Integer> findFirst = list.stream().parallel().filter(x->x>6).findFirst();

实例案例介绍

3,Stream

Stream的操作可以分为两大类:中间操作终结操作

中间操作:会返回一个新的流,一个流可以后面跟随零个或多个中间操作。其目的主要是打开流,做出某种程度的数据映射/过滤

终结操作:指返回最终的结果。一个流只能有一个终结操作,当这个操作执行后,这个流就被使用“光”了,无法再被操作。所以

这必定这个流的最后一个操作。终结操作的执行才会真正开始流的遍历,并且会生成一个结果。

中间操作可分为:

无状态(Stateless)操作:指元素的处理不受之前元素的影响

有状态(Stateful)操作:指该操作只有拿到所有元素之后才能继续下去

终结操作可分为:

短路(Short-circuiting)操作:指遇到某些符合条件的元素就可以得到最终结果

非短路(Unshort-circuiting)操作:指必须处理完所有元素才能得到最终结果

4,说明

方法名称 说明
allMatch 必须全部都满足才会返回true
anyMatch 只要有一个条件满足即返回true
noneMatch 全都不满足才会返回true
map 接收一个函数作为参数,将流中的元素进行再次加工形成一个新流,流中的每一个元素映射为另外的元素
flatMap 接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流
filter 返回结果生成新的流中只包含满足筛选条件的数据
limit 返回指定数量的元素的流。返回的是 Stream 里前面的 n 个元素
skip 和 limit()相反,将前几个元素跳过(取出)再返回一个流,如果流中的元素小于或者等于 n,就会返回一个空的流
sorted 将流中的元素按照自然排序方式进行排序
distinct 将流中的元素去重之后输出
peek 对流中每个元素执行操作,并返回一个新的流,返回的流还是包含原来流中的元素
collect 收集,从字面上去理解,就是把一个流收集起来,最终可以是收集成一个值也可以收集成一个新的集合
reduce 归约,也称缩减,顾名思义,是把一个流缩减成一个值,能实现对集合求和、求乘积和求最值操作

归约:多变一

在这里插入图片描述

map

在这里插入图片描述

flatMap

在这里插入图片描述


日夜颠倒头发少 ,单纯好骗恋爱脑 ,会背九九乘法表 ,下雨只会往家跑 ,搭讪只会说你好 ---- 2050781802@qq.com

×

喜欢就点赞,疼爱就打赏

相册 说点什么