当前位置:   article > 正文

Java-Stream详解_java stream

java stream

1️⃣ Stream 定义

StreamJava 8新增的接口,Stream可以认为是一个高级版本的 Iterator


2️⃣ Stream跟Iterator的差别

名称含义
无存储Stream是基于数据源的对象,它本身不存储数据元素,而是通过管道将数据源的元素传递给操作。
函数式编程函数式编程:对Stream的任何修改都不会修改背后的数据源,比如对Stream执行filter操作并不会删除被过滤的元素,而是会产生一个不包含被过滤元素的新的Stream
延迟执行Stream的操作由零个或多个中间操作(intermediate operation)和一个结束操作(terminal operation)两部分组成。只有执行了结束操作,Stream定义的中间操作才会依次执行,这就是Stream的延迟特性。
可消费性Stream只能被“消费”一次,一旦遍历过就会失效。就像容器的迭代器那样,想要再次遍历必须重新生成一个新的Stream

3️⃣ Stream的操作是建立在函数式接口的组合之上的

Java8中新增的函数式接口都在java.util.function包下。这些函数式接口可以有多种分类方式。其中B开头的是二元函数其他是一元函数

名称函数示例
一般函数Function,BiFunction例如:get方法
算子函数UnaryOperator,BinaryOperator例如:stream.reduce方法的参数
谓词函数Predicate,BiPredicate例如:stream.filter方法的参数
消费者Consumer,BiConsumer例如:set方法
供应者Supplier,BiSupplier例如:get方法

4️⃣ Stream的操作符

流的操作类型主要分为两种:中间操作符(Intermediate)、终端操作符(Terminal)

  1. Stream的操作由零个或多个中间操作(intermediate operation)和一个结束操作(terminal operation)两部分组成。只有执行了结束操作,Stream定义的中间操作才会依次执行,这就是Stream的延迟特性。
  2. 中间操作只是将流从一个流变成了另一个流,结束操作会生成对应的数据
  3. 这里无状态即无序,短路操作和非短路操可以理解为对应的算法操作
操作分类名称含义示例
中间操作符无状态指元素的处理不受之前元素的影响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()

5️⃣ Stream的使用


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/537123

推荐阅读
相关标签