java8 新特性之流式数据处理_Java8新特性 - 集合流式编程 - 最终操作

2、数据源的获取

2.1、数据源的简介

数据源,顾名思义,既是流中的数据的来源。是集合的流式编程的第一步,将数据源中的数据读取到流中,进行处理。注意:将数据读取到流中进行处理的时候,与数据源中的数据没有关系。也就是说,中间操作对流中的数据进行处理、过滤、映射、排序...,此时是不会影响数据源中的数据的。

2.2、数据源的获取

这个过程,其实是将一个容器中的数据,读取到一个流中。因此无论什么容器作为数据源,读取到流中的方法返回值一定是一个Stream。

// 1、通过Collection接口中的stream()方法获取数据源为Collection的流Stream stream = list.stream();

// 2、通过Collection接口的parallelStream()方法获取数据源为Collection的流Stream stream = list.parallelStream();

// 3、通过Arrays工具类中的stream()方法获取数据源为数组的流IntStream stream = Arrays.stream(array);关于stream()和parallelStream

他们都是Collection集合获取数据源的方法,不同点在于stream()方法获取的数据源是串行的,parallelStream()获取的数据源是并行的。parallelStream()内部集成了多个线程对流中的数据进行操作,效率更高。

3、最终操作

3.1、最终操作的简介

将流中的数据整合到一起,可以存入一个集合,也可以直接对流中的数据进行遍历、数据统计...,通过最终操作,需要掌握如何从流中提取出来我们想要的信息。

注意事项:最终操作,之所以叫最终操作,是因为,在最终操作执行结束后,会关闭这个流,流中的所有数据都会销毁。如果使用一个已经关闭了的流,会出现异常。

3.2、collect

将流中的数据收集到一起,对这些数据进行一些处理。最常见的处理,就是将流中的数据存入一个集合。collect方法的参数,是一个Collector接口,而且这个接口并不是一个函数式接口。实现这个接口,可以自定义收集的规则。但是,绝大部分情况下,不需要自定义。

直接使用 Collectors 工具类提供的方法即可。

// 1.1、转成 ListList result1 = list.stream().collect(Collectors.toList());

System.out.println(result1);

// 1.2、转成 SetSet result2 = list.stream().collect(Collectors.toSet());

System.out.println(result2);

// 1.3、转成 Map,提供两个函数式接口的实现,分别实现键的生成规则和值的生成规则Map result3 = list.stream().collect(Collectors.toMap(ele -> ele / 10, ele -> ele));

System.out.println(result3);

3.3、reduce

将流中的数据按照一定的规则聚合起来。

// 将流的元素,逐一带入到这个方法中,进行运算// 最终的运算结果,得到的其实是一个 Optional 类型,需要使用 get() 获取到里面的数据int result4 = list.stream().reduce((e1, e2) -> e1 + e2).get();

System.out.println(result4);

3.4、count

统计流中的元素数量。

long result5 = list.stream().count();

System.out.println(result5);

3.5、forEach

迭代、遍历流中的数据。

list.stream().forEach(System.out::println);

3.6、max & min

获取流中的最大的元素、最小的元素。

// 获取最大值Integer result6 = list.stream().max(Integer::compareTo).get();

System.out.println("max is : " + result6);

// 获取最小值Integer result7 = list.stream().min(Integer::compareTo).get();

System.out.println("min is : " + result7);

3.7、Matching

allMatch: 只有当流中所有的元素,都匹配指定的规则,才会返回 true

anyMatch: 只要流中有任意的数据,满足指定的规则,都会返回 true

noneMatch: 只有当流中的所有的元素,都不满足指定的规则,才会返回true

// 判断流中是否所有的元素都大于 50boolean result8 = list.stream().allMatch(ele -> ele > 50);

System.out.println(result8);

// 判断流中是否有大于 50 的数据boolean result9 = list.stream().anyMatch(ele -> ele > 50);

System.out.println(result9);

// 判断流中是否没有奇数boolean result10 = list.stream().noneMatch(ele -> ele % 2 != 0);

System.out.println(result10);

3.8、find

findFirst: 从流中获取一个元素(一般情况下,是获取的开头的元素)

findAny: 从流中获取一个元素(一般情况下,是获取的开头的元素)

这两个方法,绝大部分情况下,是完全相同的,但是在多线程的环境下,findAny和find返回的结果可能不一样。

Integer result11 = list.parallelStream().findFirst().get();

System.out.println(result11);

Integer result12 = list.parallelStream().findAny().get();

System.out.println(result12);

3.9、最终操作的注意事项

最终操作,会关闭流。如果一个流被关闭了,再去使用这个流,就出出现异常。

// 9、最终操作错误示范Stream stream = list.stream();

long count = stream.count();

stream.forEach(System.out::println);

Exception in thread "main" java.lang.IllegalStateException: stream has already been operated upon or closed

at java.util.stream.AbstractPipeline.sourceStageSpliterator(AbstractPipeline.java:279)

at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580)

at com.qf.cstream.FinalOperationDemo.main(FinalOperationDemo.java:78)

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

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

相关文章

【渝粤教育】电大中专电大中专职业健康与安全考试考核试题作业 题库

试卷答案 1根据系统安全工程的观点,危险是指系统中存在导致发生不期望后果的可能性超过了( ) A极限 B人们的承受程度 C危险度 D安全系数 错误 正确答案:左边查询 学生答案:A 2对职工来说,安全是&#xff0…

java jdt_在JDT中使用Java 8 Lambda

java jdt旧 Curmudgeon 认识Smalltalk的Dude 在修改Eclipse Java开发工具 (JDT)项目正在开发的Java 8支持时,我一直在使用这种语言。 我承认我对Java 8中的lambda有点不满意。 当然,这来自于知道Smalltalk (和LISP…

java 1.8签名apk_给Android的APK程序签名和重新签名的方法

签名工具的使用Android源码编译出来的signapk.jar既可给apk签名,也可给rom签名的。使用格式:java –jar signapk.jar [-w] publickey.x509[.pem] privatekey.pk8 input.jar output.jar-w 是指对ROM签名时需使用的参数publickey.x509[.pem] 是公钥文件pri…

【渝粤教育】电大中专职业生涯规划 (3)作业 题库

1职业价值观具有明确的目的性、( )和坚定性的职业选择的态度和行为。 A自由性 B动机性 C自觉性 D制约性 错误 正确答案:左边查询 学生答案:A 2不属于探索价值观方法的是( )。 A澄清反应法 B意见表决法 C间接…

使用Oracle验证外部数据

我经常在Corda Slack频道中闲逛,并尽可能回答问题。 我尝试回答的合理数量的问题与Oracle有关。 更具体地说,何时使用一个。 我觉得我可以回答,“当您需要验证可能经常更改的外部数据时使用Oracle”。 我可能在某个时候写了一个类似的答案。 …

【渝粤教育】电大中专药理学基础 (2)_1作业 题库

1.关于苯二氮卓类镇静催眠药的叙述,不正确的是()。 A.长期应用不会产生依赖性和成瘾性 B.是目前最常用的镇静催眠药 C.可用于治疗小儿高热惊厥 D.临床上用于治疗焦虑症 E.可用于心脏电复律前给药 错误 正确答案:左边查询 学生答案…

【渝粤教育】电大中专计算机职业素养 (11)作业 题库

1.用冰山模型说明职业素养构成时,我们把浮在水面上面的知识、技能等部分称为( )的职业素养。 A.获得 B.显性 C.专业 D.隐性 错误 正确答案:左边查询 学生答案:A 2.职业素养的基本内容包括:职业道德、职业意…

java 2d 教程_Java 2D开发技巧之“灯光与阴影”

Java 2D开发技巧之“灯光与阴影”(2016-12-14 02:12:25)标签:杂谈一、 引言在本文中,我们将向你展示如何为扁平形状添加一种灯光效果以实现一种类3D外观。也许你比较满意于自己的文字表达能力,但一幅图片往往能够产生更好的效果。对于图形处理…

【渝粤教育】电大中专跨境电子商务理论与实务 (17)作业 题库

1.在按照交易主体类型中,( )面对的最终客户为企业或集团客户,提供企业、产品、服务等相关信息。 A.C2C跨境电商或平台 B.B2C跨境电商或平台 C.O2O跨境电商或平台 D.B2B跨境电商或平台 错误 正确答案:左边查询 学生答案…

jooq代码生成_将jOOQ与Spring结合使用:代码生成

jooq代码生成我们可能在本教程的第一部分中还记得jOOQ指出 jOOQ从您的数据库生成Java代码,并允许您通过其流畅的API构建类型安全SQL查询。 本教程的第一部分描述了如何配置使用jOOQ的Spring驱动的应用程序的应用程序上下文,但没有描述如何使用jOOQ创建类…

【渝粤题库】陕西师范大学151109财务报告分析 作业(高起专)

《财务分析》作业 一、单选题 1.以下哪个不属于杜邦分析法的优点( )。 2.以下哪个不是比率的具体表现形式( )。 3.根据财务报表的审计结果,具有较大可信度的审计意见类型是( )。 4.关于杠杆的…

【渝粤题库】陕西师范大学200131中国古代文论 作业(专升本)

《中国古代文论》作业 一、注明下列文献的作者及年代: 1、《典论论文》 2、《文选序》 3、《戏为六绝句》 5、《与元九书》 6、《送孟东野序》 7、《六一诗话》 8、《雪涛阁集序》 9、《文赋》 10、《诗品》 11、《诗品序》 12、《文心雕龙》 13、《沧浪诗话》 14、…

java连接到mysql_[操作系统]Java如何连接到MySQL数据库的

[操作系统]Java如何连接到MySQL数据库的0 2016-05-01 15:00:15下载:mysql-connector-java-5.1.38.tar.gzhttp://dev.mysql.com/downloads/connector/j/tar zxvfmysql-connector-java-5.1.38.tar.gz解压后zhouspubuntu:~/Downloads$cd ./mysql-connector-java-5.1.38…

Spark Run本地设计模式

现在,许多Spark应用程序已成为遗留应用程序,很难在本地进行增强,测试和运行。 Spark具有很好的测试支持,但仍有许多Spark应用程序不可测试。 当您尝试运行一些旧的Spark应用程序时,我将分享一个常见错误。 Exceptio…

【渝粤题库】陕西师范大学201771 中国古代文学(一) 作业

《中国古代文学(一)》作业 一、单选题(共30小题,每题2分,共60分) 1、先秦以“笔法”、“微言大义”著称于世的史书是( ) A《尚书》 B《国语》 C《春秋》 D《战国策》 2、汉代“四家诗…

mave本地导入mysql的jar包_将本地的jar包引入到maven项目中

首先进入到maven的目录下,并且将要引入的jar包也放在这个目录下然后执行命令mvn install:install-file -DfilecheckDataAdapter-api.jar -DgroupIdorg.cegn.des -DartifactIdcheckDataAdapter-api -Dversion2.0 -Dpackagingjar等到success成功后,在maven…

【渝粤教育】广东开放大学 网页设计与制作 形成性考核 (25)

选择题 题目: 当链接指向下列哪一种文件时,不打开该文件,而是提供给浏览器下载?( ) 答案:看左侧 题目: 若要获得名为login的表单中名为txtuser的文本输入框的值,以下获取方法中,正…

mysql导入创建表空间_oracle创建表空间 导入数据库

oracle2 然后是创建表空间创建表空间需要创建两个一个临时表空间 一个表空间--创建表空间create tablespace abc datafile ‘D:\tablespce\LANDHIGH_SFTMS.dbf‘ size 500m;--创建用户并指定表空间create user admin identified by admin default tablespace abc quota 500m …

【渝粤教育】广东开放大学 软件工程 形成性考核 (50)

选择题 题目: 关于协作图的描述,下列哪个不正确() 题目:多对象是UML哪个视图中的概念( )。 题目:在UML中,接口有几种表达方式()。 题目&#xff1…

java集合根据值排序_Java 8:对集合中的值进行排序

java集合根据值排序意识到Java 8将在接下来的几周内发布其GA版本之后,我认为现在是时候来看看它了,在过去的一周里,我一直在阅读Venkat Subramaniam的书 。 我要讲的是第3章,它涉及对人员集合进行排序。 Person类的定义大致如下&…