赞
踩
Stream
是Java 8
新增的接口,Stream
可以认为是一个高级版本的 Iterator
。
名称 | 含义 |
---|---|
无存储 | Stream 是基于数据源的对象,它本身不存储数据元素,而是通过管道将数据源的元素传递给操作。 |
函数式编程 | 函数式编程:对Stream 的任何修改都不会修改背后的数据源,比如对Stream 执行filter 操作并不会删除被过滤的元素,而是会产生一个不包含被过滤元素的新的Stream 。 |
延迟执行 | Stream的操作由零个或多个中间操作(intermediate operation) 和一个结束操作(terminal operation) 两部分组成。只有执行了结束操作,Stream 定义的中间操作才会依次执行,这就是Stream 的延迟特性。 |
可消费性 | Stream 只能被“消费”一次,一旦遍历过就会失效。就像容器的迭代器那样,想要再次遍历必须重新生成一个新的Stream 。 |
Java8
中新增的函数式接口都在java.util.function
包下。这些函数式接口可以有多种分类方式。其中B开头的是二元函数
,其他是一元函数
名称 | 函数 | 示例 |
---|---|---|
一般函数 | Function,BiFunction | 例如:get 方法 |
算子函数 | UnaryOperator,BinaryOperator | 例如:stream.reduce 方法的参数 |
谓词函数 | Predicate,BiPredicate | 例如:stream.filter 方法的参数 |
消费者 | Consumer,BiConsumer | 例如:set 方法 |
供应者 | Supplier,BiSupplier | 例如:get 方法 |
流的操作类型主要分为两种
:中间操作符(Intermediate
)、终端操作符(Terminal
)
Stream
的操作由零个或多个中间操作(intermediate operation
)和一个结束操作(terminal operation
)两部分组成。只有执行了结束操作,Stream定义的中间操作才会依次执行,这就是Stream
的延迟特性。操作分类 | 名称 | 含义 | 示例 |
---|---|---|---|
中间操作符 | 无状态 | 指元素的处理不受之前元素的影响 | unordered() filter() map() mapToint() mapToLong() mapToDouble() flatMap() flatMapToInt() flatMapToLong() flatMapToDouble() peek() |
中间操作符 | 有状态 | 指该操作只有拿到所有元素之后才能继续下去 | distinct() sorted() limit() skip() |
终端操作符 | 非短路操作 | 指必须处理所有元素才能得到最终结果 | forEach() forEachOrdered() toArray() reduce() collect() max() min() count() |
终端操作符 | 短路操作 | 指遇到某些符合条件的元素就可以得到最终结果,如 A或B,只要A为true,则无需判断B的结果 | anyMatch() allmatch() noneMatch() findFirst() findAny() |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。