java8的stream流详解
时间: 2023-06-22 10:27:35 浏览: 199
Java 8 引入了一种新的抽象概念 Stream(流),它使得对数据的处理变得更加简便和高效。Stream 是一种来自数据源的元素队列并支持聚合操作。
Stream API 借助于lambda表达式,极大的提高了Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。同时它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,使用fork/join并行方式来拆分任务和加速处理过程。
Stream 的特性可以归纳为:
- 不是数据结构
- 没有存储元素
- 支持延迟计算
- 支持并行处理
Stream 的操作分为中间操作和终止操作。中间操作会返回一个新的 Stream,我们可以对这个新的 Stream 进行下一步的操作。终止操作则会返回一个最终的结果。
Stream 操作可以分为以下几种:
- Intermediate(中间)操作:一个流可以后面跟随零个或多个Intermediate操作。其目的主要是打开流,做出某种程度的数据映射/过滤,然后返回一个新的流,交给下一个操作使用。这类操作都是惰性化的(lazy),就是说,仅仅调用到这类方法,并没有真正开始流的遍历。
- Terminal(终止)操作:一个流只能有一个 Terminal 操作,当这个操作执行后,流就被使用“光”了,无法再被操作。所以这必定是流的最后一个操作。Terminal 操作的执行,才会真正开始流的遍历,并且会生成一个结果,或者一个 side effect。
Stream API 提供了大量的方法,可以用来完成各种不同的操作,如过滤、映射、筛选、查找、归约等等。这些方法可以分为以下几类:
- 转换操作:map、flatMap、filter、distinct、sorted、peek、limit、skip
- 聚合操作:forEach、reduce、collect
- 匹配操作:allMatch、anyMatch、noneMatch
- 查找操作:findFirst、findAny
- 统计操作:count、min、max、average、sum
Stream API 的使用可以大大简化代码,增加可读性和可维护性。同时,由于它的并行特性,可以有效地提升程序的性能。
阅读全文