Stream使用小结
in developCo-De with 0 comment

Stream使用小结

in developCo-De with 0 comment

Stream使用小结

For my bad memory

Stream的生命周期

  1. 创建(加载数据) ----> 多次流操作(数据处理) ----> 返回(组装数据结构)
  2. 创建(加载数据) ----> 返回(组装数据结构)

创建

基于数据,通常为集合或者多个同类型对象,创建一个Stream或者Parallel Stream(并行流)

Stream本身创建后,只能被使用or消费or遍历一次,its a one way trip

可以通过Supplier<Stream>,来复用Stream创建的相关代码,整洁代码,但注意不是复用对象,Stream对象只能被消费一次

操作(intermediate ops)

对Stream内容进行相关操作,例如过滤,转换等,形成一个新的Stream

操作同时可以区分为Stateless(无状态)和Stateful(有状态)两种类型,无状态指对每一个元素的操作不依赖另一个元素(数据,状态,结果)等,有状态指每次操作会将前一个元素的操作结果向后传递,可以用于下一次操作。在使用上,简单点来说,有状态的操作,不适合parallel stream

返回(terminal ops)

将Stream的内容或者属性,或者操作结果,按照期望的数据结构进行返回,例如新的集合,元素数量或者输出等

创建和操作,都是通过Stream对象来进行的,最终需要通过返回/中断操作,将最终的数据,返回到主流程。这也是所有函数化编程的基本原则,通常配合Collections等其他的函数化方法/api,简化返回结构的创建。

Stream 的创建

Stream 的常用操作

操作作用输入数据输出基准状态操作
filter基于给定的判断Function,判断元素是否符合,返回true or false,基于Predicate单个元素boolean=truestateless
map基于给定的Function,对每个元素进行映射,转换,操作,返回结果单个元素函数结果集stateless
flatmap将Stream<Collection>转换为Stream集合对象流stateless
limit只返回前n个元素long前n个元素stateful
skip跳过前n个元素,只返回剩余元素long不包含前n个元素stateful
distinct去除重复元素,基于元素的equals元素唯一stateful
sorted基于Comparator对元素进行排序无/Comparator Func有序的stateful

Stream 的返回

操纵作用参数输出备注
allMatchStream中的元素是否符合给定判断条件基于元素的true/false函数Booleanshort-circuiting
anyMatch
Stream中的元素是否有任一符合给定判断条件基于元素的true/false函数Booleanshort-circuiting
noneMatchStream中的元素无任何一个符合给定判断条件基于元素的true/false函数Boolean全loop
collect将Stream中的元素,收集到一个可变的Collection对象中,便于进行后续操作承载容器/集合类型,配合Collectors对象适用集合对象Collection并行流要求输入输出均为无须的,输入参数主要为Collections的相关实现,支持joing,groupBy等
forEach对Stream中的每一个元素执行给定的action需要对元素执行的action循环执行结果产生side affect
count返回Stream中的元素个数long配合Filter
min基于元素比较方法,返回Stream中的最小元素元素的Comparator单个元素,Optional
max基于元素比较方法,返回Stream中的最大元素元素的Comparator单个元素,Optional

其他

maxresdefault.jpg
2022-11 Ivan Dong

Comments are closed.