Java 8 Stream中间操作(方法)示例

Java 8 Streams中间操作的完整指南。 所有内置Stream API中间操作(方法)的列表以及示例。

1.概述

在本教程中,我们将学习什么是 Java 8 Stream 中的中间操作 。 所有这些操作都在java.util.stream.Stream

在上一教程中,我们讨论了Java 8 Stream APILambda Expressions

规则:

Java 8 Stream中间操作返回另一个Stream ,该Stream允许您以查询的形式调用多个操作。


在调用终端操作之前,流中间操作不会执行。

所有的中间操作都是惰性的,因此直到实际需要处理结果时才执行它们。

在执行管道的终端操作之前,流的遍历不会开始。

这是所有Stream中间操作的列表:

过滤()
地图()
flatMap()
不同()
sorted()
窥视()
限制()
跳跃(

我们将在后续文章中看到有关每个操作的示例程序。

2. filter()

返回由该流的元素组成的流
匹配给定的谓词

句法:

 Stream filter​(Predicate predicate) 

例:

 Stream intStream = Stream.of( 1 , 2 , 3 , 4 , 5 );  Stream subStream = intStream.filter(value -> value > 3 );  long count = subStream.count();  System.out.println(count); 

输出:

 2 

该程序将Predicate功能接口用作lambda,并检查数字是否大于3。

3. map()

返回包含以下内容的流
将给定功能应用于此流元素的结果

句法:

 Stream map​(Function mapper) 

例:

 // map() Operation  Stream strStream = Stream.of( "Welcome" , "To" , "java" , "blog" );  Stream subStream2 = strStream.map(string -> { if (string == "java" ) return "Java-W3schools" ; return string;  });  List welomeList = subStream2.collect(Collectors.toList());  System.out.println(welomeList); 

在此,map函数采用Function的参数类型。 该功能是一个功能接口,并具有一种方法
apply() 。 此方法采用一个值并返回另一个值。

输出:

 [Welcome, To, Java-W3schools, blog] 

在此示例中,将单词“ java”替换为“ Java-W3schools”。

map()wrpper类型也属于中间操作类别。

mapToDouble(),mapToLong(),mapToInt()

4. flatMap()

此平面图最适合于收藏列表。 我们将显示带有两个列表的示例,以及如何使用它们将它们转换为单个流
flatmap()方法。

句法:

 Stream flatMap​(Function> mapper) 

例:

示例程序可计算两个列表中唯一水果名称的数量。

 Stream flatStream = stream.flatMap(list -> list.stream());  //flatStream.forEach(str -> System.out.println(str));  long distinctFruites = flatStream.distinct().count();  System.out.println(distinctFruites); 

输出:

 6 

并且在使用Stream“ 流已被操作或关闭 ”时也看到了解决方案中最常见的问题。 取消换行后flatStream.forEach(str-> System.out.println(str)); 此程序将异常java.lang.IllegalStateException

类似包装器类型的flatMap()方法,例如flatMapToInt(),flatMapToLong(),flatMapToDouble()

5,distinct()

返回由该流的不同元素组成的流 (根据Object.equals(Object))。

对于有序流,对不同元素的选择是稳定的(对于重复元素,将保留在遇到顺序中首先出现的元素。)对于无序流,则不保证稳定性。

句法:

 Stream distinct() 

例:

 // distinct() Operation  Stream fruitsStream = Stream.of( "Apple" , "Jack Fruit" , "Water Melon" Stream fruitsStream = Stream.of( "Water Melon" , "Apple" );  Stream distinctStream = fruitsStream.distinct();  distinctStream.forEach(name -> System.out.println(name)); 

输出:

 Apple  Jack Fruit  Water Melon 

6. sorted()

返回由该流的元素组成的流,并根据自然顺序排序。

如果此流的元素不可比较,则在执行终端操作时可能会引发java.lang.ClassCastException。


注意 :对于有序流,排序是稳定的。 对于无序流,不保证稳定性。

句法:

 Stream sorted() 

例:

 // sort() Operation  Stream vegStream = Stream.of( "tomoto" Stream vegStream = Stream.of( "tomoto" , "Green Chilli" , "Pototo" , "Beet root" );  Stream sortedStream = vegStream.sorted();  sortedStream.forEach(name -> System.out.println(name)); 

输出:

 Beet root  Green Chilli  Pototo  tomoto 

7. peek()

返回由该流的元素组成的流,并在从结果流中消耗元素时对每个元素另外执行提供的操作。

peek()方法是在Java 8中调试流的最佳方法。eclipse将不支持调试。

注意:我们无法预测并行流管道的peek()调用顺序。

句法:

 Stream peek​(Consumer action) 

例:

 // peek() Operation  Stream.of( "one" , "two" , "three" , "four" ).filter(e -> e.length() > 3 ) .peek(e -> System.out.println( "Filtered value: " + e)).map(String::toUpperCase) .peek(e -> System.out.println( "Mapped value: " + e)).collect(Collectors.toList()); 

对于每次满足过滤条件的条件,将立即调用peek()方法。 看到输出,您将更好地理解。

输出:

 Filtered value: three  Mapped value: THREE  Filtered value: four  Mapped value: FOUR 

8. limit()

返回具有指定大小的流 。 它将截断流中剩余的元素。


注意: limit()适用于顺序流,不能为并行流提供良好的性能结果。

句法:

 Stream limit​( long maxSize) 

例:

程序将流限制为前两个元素。

 Stream.of( "one" , "two" , "three" , "four" ).limit( 2 ).forEach(item -> System.out.println(item)); 

输出:

 one  two 

9. skip()

此方法跳过给定的n个元素,并返回Stream。 当要对列表或流中的最后n条记录或行执行任何操作时,这是最有用的。

句法:

 Stream skip​( long n) 

例:

程序跳过前两个元素并打印其余元素。

 Stream.of( "one" , "two" , "three" , "four" , "five" ).skip( 2 ).forEach(item -> System.out.println(item)); 

输出:

 three  four  five 

10.结论

在本教程中,我们已经了解了什么是流中的中间操作。 中间操作如何在新的Java 8 Streams中工作。

并且还讨论了带有示例程序的所有中间方法的列表。

这篇文章中显示的所有程序都通过GitHub进行

翻译自: https://www.javacodegeeks.com/2020/04/java-8-stream-intermediate-operations-methods-examples.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339647.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux服务 运维案例,linux运维实战练习案例-2015年12月20日-12月31日

1、创建一个10G的文件系统,类型为ext4,要求开机可自动挂载至单独数据/data目录;[[email protected] /]# cat /proc/partitionsmajor minor #blocks name8 0 52428800 sda8 1 204800 sda18 2 4096000 sda28 …

使用Quarkus调试容器中的系统测试(视频)

如果您能够借助容器在本地进行端到端测试应用程序,则可以提高开发效率。 在下面的视频中,我将展示如何使用Quarkus在Docker容器中调试本地系统测试。 这是我关于有效测试的视频课程的Quarkus扩展。 要了解全部情况,还可以查看以下资源&…

linux中memcpy实现分析,ARM64 的 memcpy 优化与实现

如何优化 memcpy 函数Linux 内核用到了许多方式来加强性能以及稳定性,本文探讨的 memcpy 的汇编实现方式就是其中的一种,memcpy 的性能是否强大,拷贝延迟是否足够低都直接影响着整个系统性能。通过对拷贝函数的理解可以加深对整个系统设计的一…

ejb生命周期_EJB 3.x:生命周期和并发模型(第2部分)

ejb生命周期这是两部分系列的第二篇。 第一部分介绍了有状态和无状态EJB的生命周期以及并发行为。 我将在本文中介绍Singleton EJB 。 Singleton模式可以说是最常用(有时被滥用!)的模式。 单吨又爱它! Java EE使我们无需编写显…

linux修改文件没有备份文件,linux文件或目录权限修改后如何恢复(备份了权限就能恢复)...

操作系统 RHEL5如果你在linux上执行了如下操作chmod -R 777 / 或者 chmod -R 700 /那么恭喜你,你的系统即将崩溃,重启之后,你进不了图形界面,而且很多服务都起不来为什么呢?因为linux中,系统的有些文件和目…

JDK 14 / JEP 305模式匹配“ Smart Casts”实例

我通常将Java代码中instanceof运算符的存在视为“ 红色标志 ”,这意味着在某些情况下使用instanceof不一定是错误的,但是使用它有时表示可以以一种更干净的方式解决设计问题,如所述本文末尾引用的一些资源中的内容(包括有关Java以…

linux美化原理,x-window字体原理及美化

x-window字体原理及美化发布时间:2006-10-07 01:25:15来源:红联作者:caldo1. 简介在我必须处理的一堆讨厌事中,有一项就是没完没了的 X 缺省字体和字体设定 (我专指 XFree86,其它的 X 也许比较好)。有些程序缺省使用固定宽度字体 (fixed width fonts)&am…

易流即时配送_即时大数据流处理=即时风暴

易流即时配送在Ubuntu背后的公司Canonical,每6个月进行一次技术工作,以第一手测试我们的工具并向其他人展示新想法。 这次,我创建了一个即时大数据解决方案,更具体地讲是“即时风暴”。 Storm现在是Apache基金会的一部分&#xf…

c语言有参有类最小公倍数,【C语言】写一个函数,并调用该函数求两个整数的最大公约数和最小公倍数...

程序分析:在数学中,两个数的最小公倍数两个数的乘积/两数的最大公约数。求两个数的最大公约数,运用辗转相除法:已知两个整数M和N,假定M>N,则求M%N。如果余数为0,则N即为所求;如果…

csp真题字符串匹配c语言,CCF CSP认证考试历年真题 模板生成系统 C语言实现

试题编号:201509-3试题名称:日期计算 时间限制:1.0s 内存限制:256.0MB问题描述:成成最近在搭建一个网站,其中一些页面的部分内容来自数据库中不同的数据记录,但是页面的基本结构是相同的。例如&…

osgi架构与linux_OSGi:进入微服务架构的门户

osgi架构与linux在构建可扩展,可靠的分布式系统的背景下,“模块化”和“微服务体系结构”这两个术语如今经常出现。 众所周知,Java平台本身在模块化方面很弱( Java 9将通过交付Jigsaw项目来解决此问题),这为…

引入我们全新的YouTube频道进行视频课程编程

嘿,极客们, 收到社区的反馈并紧贴行业发展趋势,我们非常高兴宣布推出全新的Youtube频道 ! 在我们的频道上,我们将主持与Java编程有关的视频课程,但通常也会进行软件开发。 我们将介绍代码演练以及完整的…

田忌赛马c语言程序设计,还是杭电1052田忌赛马

已结贴√问题点数:20 回复次数:2还是杭电1052田忌赛马//昨天那个算法漏洞挺大,但我重新构思了,但运行到312ms还是wa了。我测试了许多数据,结果是对的,郁闷了,谁能救救我啊?#include&…

ArrayList clone()– ArrayList深拷贝和浅拷贝

示例程序以ArrayList克隆方法为例。 学生对象上的ArrayList深层复制和浅层复制示例。 1.简介 ArrayList clone()– ArrayList深复制和浅复制 。 ArrayList clone()方法用于创建list的浅表副本 。 在新列表中,仅复制对…

南京邮电大学c语言实验报告4,南京邮电大学算法设计实验报告——动态规划法...

《南京邮电大学算法设计实验报告——动态规划法》由会员分享,可在线阅读,更多相关《南京邮电大学算法设计实验报告——动态规划法(12页珍藏版)》请在人人文库网上搜索。1、实 验 报 告(2009/2010学年 第一学期)课程名称算法分析与设计A实验名称动 态 规 …

启动jboss_3种启动JBoss BPM流程的基本方法

启动jboss这一集提示和技巧将帮助您了解根据需要启动流程实例的最佳方法。 规划项目可能包括流程项目,但是您是否考虑过可以启动流程的各种方式? 也许您的JBoss BPM Suite在您的体系结构中本地运行,也许您在云中运行,但是无论它…

单片机控制灯光亮度c语言程序,基于51单片机控制LED灯光亮度并报警

利用pwm控制led灯光亮度大小。可以显示许多亮度等级 到最低或者最高亮度等级会发出报警。设计思路:LED一般是恒流操作的,如何改变LED的亮度呢?答案就是PWM控制。在一定的频率的方波中,调整高电平和低电平的占空比,即可…

将Quarkus应用程序部署到AWS Elastic Beanstalk

Elastic Beanstalk允许在AWS云中部署和管理应用程序,而无需了解运行这些应用程序的基础架构。 使用Elastic Beanstalk,您可以运行可处理HTTP请求的网站,Web应用程序或Web API,但也可以运行辅助应用程序以运行长任务。 Elastic Be…

c语言中rand()%900,c语言 n=rand()%5是什么意思

rand()函数会产生范围为0至32767的随机数,% 让它与5求余,变成0至4的随机数,不过每次启动程序产生的随机数都相等,在用srand(unsigned int)输入种子数后产生的才不一样,一般都用的 srand((unsigned int)time(NULL)) 产生…

gradle 构建应用流程_使用Gradle构建和应用AST转换

gradle 构建应用流程最近,我想在Gradle项目中构建并应用本地ast转换。 虽然我可以找到几个有关如何编写转换的示例,但找不到完整的示例来显示完整的构建过程。 转换必须单独编译然后放在类路径中,因此其源代码不能简单地放在Groovy源代码树的…