了解一下,Java8 Stream的中间操作顺序

简介: 云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 垂直执行:map和filter先看下面一个例子,找出流中"b"的字符串,并将其转化为大写,包含两个中间操作 map 和 filter 以及结束操作forEach。

云栖号资讯:【点击查看更多行业资讯
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!


垂直执行:map和filter

先看下面一个例子,找出流中"b"的字符串,并将其转化为大写,包含两个中间操作 map 和 filter 以及结束操作forEach。

1

由输出结果可以看出,map/filter/forEach 是垂直执行,map和filter执行了5次,forEach执行了1次。

如果我们改变操作顺序,filter方法最先执行,将大大减少执行的次数。

2

filter还是执行了5次,forEach执行了1次,但map降为了1次,也就是说符合filter的才会执行map操作,这种技巧在Stream流中有大量元素时,执行的更快。

水平执行:sorted

接下来,我们看下sorted排序操作,现学现卖,咱们把filter放在了map操作之前:

8

9

这时候发现,sorted操作是水平执行的,会对流中所有的元素进行排序,总共执行了8次。

我们再一次更改操作顺序,来尝试优化性能:

4

这次发现,sorted方法并没有被调用,因为被filter过滤之后,流中只剩下一个元素,也就不需要执行排序操作了。

而且,sorted对filter和map这种垂直执行的方法,具有截断作用,也就是说sorted前的中间操作,需要完全执行,形成一个完整的Stream流,交给sorted排序。

混合使用

举个例子,比如把"b"和"d"过滤出来,转为大写,并排序:

8

因为sorted的截断作用,先垂直执行filter和map,然后水平执行sorted,最后垂直执行forEach。

小结

在编写复杂的Stream方法链时,一般应该把filter操作放到最前边,以减少后续操作的压力,这一点在Stream流中有大量元素时更为明显。

而且,你最好把上边的代码自己运行下,看看输出结果,你会理解的更深刻,下一节,咱们聊聊Stream的高级操作。

【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/live

立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK

原文发布时间:2020-06-08
本文作者:读钓
本文来自:“掘金”,了解相关信息可以关注“掘金”

相关文章
|
1月前
|
Java API 数据处理
探索 Java 8 中的 Stream 流:构建流的多种方式
探索 Java 8 中的 Stream 流:构建流的多种方式
|
1月前
|
Java API 数据处理
Java 8新特性之Stream API详解
【2月更文挑战第22天】本文将深入探讨Java 8中引入的Stream API,这是一种基于函数式编程的新特性,用于处理集合数据。我们将详细介绍Stream的基本概念、操作方法以及在实际开发中的应用,帮助读者更好地理解和使用这一强大的工具。
|
1月前
|
Java 数据处理
java8新特性-Stream(流)
java8新特性-Stream(流)
41 0
|
1月前
|
分布式计算 Java API
Java 8新特性之Lambda表达式和Stream API
【2月更文挑战第18天】随着Java 8的发布,Lambda表达式和Stream API成为了Java开发者的新宠。本文将详细介绍Lambda表达式的基本语法、使用方法以及与Stream API的结合,帮助读者更好地理解和运用这些新特性,提高代码的简洁性和可读性。
|
1月前
|
Java API
Java 8新特性之Lambda表达式与Stream API
【2月更文挑战第21天】本文将介绍Java 8中的两个重要特性:Lambda表达式和Stream API。Lambda表达式是Java 8中引入的一种新的编程语法,它允许我们将函数作为参数传递给方法,从而使代码更加简洁、易读。Stream API是一种用于处理集合的新API,它提供了一种高效且易于使用的处理数据的方式。本文将通过实例讲解这两个特性的基本用法以及它们如何帮助我们编写更简洁、高效的Java代码。
|
3天前
|
存储 安全 Java
说说Java 8 引入的Stream API
说说Java 8 引入的Stream API
8 0
|
3天前
|
分布式计算 Java API
Java 8新特性之Lambda表达式与Stream API
【4月更文挑战第16天】本文将介绍Java 8中的两个重要新特性:Lambda表达式和Stream API。Lambda表达式是Java 8中引入的一种新的编程语法,它允许我们将函数作为参数传递给其他方法,从而使代码更加简洁、易读。Stream API是Java 8中引入的一种新的数据处理方式,它允许我们以声明式的方式处理数据,从而使代码更加简洁、高效。本文将通过实例代码详细讲解这两个新特性的使用方法和优势。
|
7天前
|
前端开发 Oracle Java
Java 22 新增利器: 使用 Java Stream Gather 优雅地处理流中的状态
Java 22 新增利器: 使用 Java Stream Gather 优雅地处理流中的状态
17 0
|
7天前
|
存储 Java 关系型数据库
掌握Java 8 Stream API的艺术:详解流式编程(一)
掌握Java 8 Stream API的艺术:详解流式编程
35 1
|
11天前
|
存储 Java API
java8新特性 lambda表达式、Stream、Optional
java8新特性 lambda表达式、Stream、Optional