上文我们对Stream做了简单介绍并给出了创建方式,没看过的同学请出门左转 Java 8 Stream(一、Stream简介及创建方式)。
一、Stream操作
Stream操作分为中间操作和终端操作。每个Stream操作由数据源、零个或多个中间操作和一个终端操作组成。
(一)数据源
上文中提到的集合、数组和无限序列生成器(函数式接口)等都可作为数据源。
(二)中间操作
所有中间操作都是懒执行,即只有在终端操作执行时才会执行,执行中间操作实际上并不执行任何操作,而是创建一个新的流,当遍历该流时,它包含与给定谓词匹配的原始流的元素。因此在执行终端操作之前,流的遍历不会开始。
这是非常重要的特性,对于无限流尤其重要——因为它允许我们创建只有在调用终端操作时才实际调用的流。
常用的中间操作有filter()、map()、flatMap()等。
(三)终端操作
终端操作可以遍历流生成最终结果,执行终端操作即可认为消费管道,上文提到Stream的特点只可消费一次,故该管道已不能再被使用。
几乎在所有情况下,终端操作都是立即执行的,这也是无限流的重要基础——我们是否可以限制无限流,例如limit()。
常用的终端操作有forEach()、toArray()、collect()等。