Lambda和Stream
一、Stream 操作分类
官方将 Stream 中的操作分为两大类: 终结操作(Terminal operations) 和中间操作(Intermediate operations) 。
中间操作会返回一个新的流, 一个流可以后面跟随零个或多个中间操作。 其目的主要是打开流, 做出某种程度的数据映射/过滤,然后会返回一个新的流, 交给下一个操作使用。 这类操作都是惰性化的(lazy) , 就是说, 仅仅调用到这类方法, 并没有真正开始流的遍历。 而是在终结操作开始的时候才真正开始执行。
中间操作又可以分为无状态(Stateless) 与有状态(Stateful) 操作, 无状态是指元素的处理不受之前元素的影响, 有状态是指该操作只有拿到所有元素之后才能继续下去。
终结操作是指返回最终的结果。 一个流只能有一个终结操作, 当这个操作执行后, 这个流就被使用“光”了, 无法再被操作。 所以这必定这个流的最后一个操作。 终结操作的执行才会真正开始流的遍历, 并且会生成一个结果。
终结操作又可以分为短路(Short-circuiting) 与非短路(Unshort-circuiting) 操作,
- 短路是指遇到某些符合条件的元素就可以得到最终结果,
- 非短路是指必须处理完所有元素才能得到最终结果。 操作分类详情如下图所示:
二、Stream的一些用法
可以参照地址: https://gitee.com/im_a_follower_of_code_cloud/Lambda_And_Stream.git