在JDK 9(以及8)以及更高版本中,所有内容都可以作为一个流

在JDK 8中,我们终于可以使用流了,除了您使用的API无法产生流的时代之外,其他一切都很好。 然后,您最终编写了一个包装器类方法,该方法允许您将迭代器转换为Stream,因为您错过了流。

public static <T> Stream<T> asStream(Iterator<T> it) {return StreamSupport.stream(Spliterators.spliteratorUnknownSize(it,Spliterator.IMMUTABLE | Spliterator.ORDERED),false);
}

现在有一些方法可以在迭代和生成的情况下以编程方式生成流,但是这两种方法都会生成无限流,而在大多数情况下,您确实想将现有接口改编为有限流。

在JDK 9中,通过引入一种新形式的迭代方法很好地解决了该问题,该方法允许您提供一个谓词来表示流的结束。

在下面的示例中,我将使用谓词,该谓词将一直持续到您获得流的空条目为止,然后由读者自己来提出谓词的更多想象力。 在这个简单的示例中,我使用Throwable的getCause方法使我们沿着错误的链接列表移动。 请注意,与预发布版本相比,这将花费很少的代码。

// Simple linked list
//
Exception e = new Exception("one");
Exception e2 = new Exception("two",e);
Exception e3 = new Exception("three", e2);Stream.iterate(e3, Objects::nonNull, Throwable::getCause)// Output the messages in turn.map(Throwable::getMessage).forEach(System.out::println);

第二个示例将ReferenceQueue转换为Stream,以便我们可以轻松地耗尽其内容以根据需要进行处理。 这段代码有些不同,因为容器与要处理的对象不同,因此我们使用相同的方法提供种子和下一个值,当队列为空时,它返回null。

ReferenceQueue<Thing> queue = new ReferenceQueue<>();// Make some things and then collect them
WeakReference one = new WeakReference<Thing>(new Thing(), queue);
WeakReference two = new WeakReference<Thing>(new Thing(), queue);
System.gc(); System.gc(); System.gc(); System.gc(); System.gc();Stream.<Reference<? extends Thing>>iterate(queue.poll(), Objects::nonNull, v -> queue.poll()).forEach(System.out::println);

第三个示例显示了如何在Node树上行走,请注意,当我们工作到叶子的末尾时,嵌套的流迭代器将备份列表。

Node root = doc.getDocumentElement();Stream.iterate(root,Objects::nonNull,v -> {if (v.getFirstChild()!=null) {return v.getFirstChild();}if (v.getNextSibling()!=null) {return v.getNextSibling();}return Stream.iterate(v, Objects::nonNull, Node::getParentNode).filter(node -> node.getNextSibling()!=null).map(Node::getNextSibling).findFirst().orElse(null);}).map(Node::getNodeName).forEach(System.out::println);

因此,通过进行少量的心理操练,就可以将大多数旧版API转换为干净的Stream,因此您可以忽略那些讨厌的老式循环。 而且,如果您陷于JDK 8中,那么很容易使用之前的asStream来组合类似的功能:

public static<T> Stream<T> iterateFinite(T seed, Predicate<? super T> hasNext, UnaryOperator<T> next) {return asStream(new Iterator<>() {T current = seed;@Overridepublic boolean hasNext() {return hasNext.test(current);}@Overridepublic T next() {if (current == null) {throw new NoSuchElementException();}try {return current;} finally {current = next.apply(current);}}});
}

翻译自: https://www.javacodegeeks.com/2018/12/jdk-9-everything-can-stream.html

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

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

相关文章

【渝粤教育】电大中专学前儿童健康教育_1作业 题库

1健康的定义是()年&#xff0c;世界卫生组织提出的。 A1945 B1948 C1955 D1958 错误 正确答案&#xff1a;左边查询 学生答案&#xff1a;A 2健康不仅仅是没有疾病或虚弱&#xff0c;而是包括身体、心理和()方面的完好状态。 A精神 B躯体 C社会 D道德 错误 正确答案&#xff1a…

oracle12c asmfd,Oracle 12C R2-新特性-自动配置ASMFD

1说明ASMFD是12.1中就引入的新特性&#xff0c;它可以不用手动配置ASM磁盘&#xff0c;更重要的是它可以保护磁盘被其他非Oracle操作复写&#xff0c;例如dd&#xff0c;echo等命令。https://www.cndba.cn/cndba/Expect-le/article/2559https://www.cndba.cn/cndba/Expect-le/a…

【渝粤教育】电大中专学前儿童科学教育1作业 题库

1.学前儿童科学教育的学习重点是( ) A.学前儿童科学教育的内涵 B.学前儿童科学教育的概念 C.科学的概念 D.技术的概念 正确 正确答案&#xff1a;左边查询 学生答案&#xff1a;B 2.学前儿童科学教育的学习难点是( ) A.学前儿童科学教育的内涵 B.学前儿童科学教育在儿童发展中的…

matlab处理svm的数据,SVM-GUI 使用支持向量机(SVM)算法进行处理数据,提取特征参数,并通过MATLAB界面显示相关数 238万源代码下载- www.pudn.com...

文件名称: SVM-GUI下载收藏√ [5 4 3 2 1 ]开发工具: matlab文件大小: 231 KB上传时间: 2014-05-13下载次数: 13提 供 者: 幽灵详细说明&#xff1a;使用支持向量机(SVM)算法进行处理数据&#xff0c;提取特征参数&#xff0c;并通过MATLAB界面显示相关数据-Using Support…

【渝粤教育】电大中专学前儿童语言教育作业 题库

1语言是()和思维的工具。 A交际 B动作 C声音 D表情 正确 正确答案&#xff1a;左边查询 学生答案&#xff1a;A 2下面哪个选项不是学前儿童语言获得理论()。 A后天环境论 B先天决定论 C先天与后天相互作用论 D遗传决定论 错误 正确答案&#xff1a;左边查询 学生答案&#xff1…

【渝粤教育】电大中专就业指导 (3)作业 题库

1&#xff08; &#xff09;给中职生就业带来的机遇和挑战 A“十三五”规划 B一带一路 C发展标准化服务业 正确 正确答案&#xff1a;左边查询 学生答案&#xff1a;A 2最受企业欢迎的人才应具备&#xff08; &#xff09;素质 A道德品质、文化认同、敬业精神、团队意识、创新思…

Java 11:新的HTTP客户端API

在Java 11中&#xff0c;已将最初在Java 9中引入的孵化HTTP客户端API进行了标准化。 它使连接URL&#xff0c;管理请求参数&#xff0c;cookie和会话更加容易&#xff0c;甚至支持异步请求和websocket。 回顾一下&#xff0c;这是使用传统的URLConnection方法从URL读取的方式&…

按主键更新另一个表oracle,SQL根据ID匹配从一个表更新到另一个表

我相信一个连接的UPDATE FROM将有助于&#xff1a;MS SQLUPDATE Sales_Import SET Sales_Import.AccountNumber RAN.AccountNumber FROM Sales_Import SI INNER JOIN RetrieveAccountNumber RAN ON SI.LeadID RAN.LeadID;MySQL和MariaDBUPDATE Sales_Import SI, RetrieveAcco…

【渝粤教育】电大中专市场营销管理30分钟交卷作业 题库

1.下列关于产品的叙述错误的是&#xff08; &#xff09; A.它实际上是向人传送服务的工具 B.产品是指能够满足人类某种需要或欲望的东西 C.通常可分为实体产品和无形产品 D.无形产品主要指产品信息 错误 正确答案&#xff1a;左边查询 学生答案&#xff1a;C 2.企业目标的主要…

mockito_Eclipse的Mockito模板

mockito有时候&#xff0c;我想念树林里的树木-那是一段令人不安的长时间。 我最近才再次意识到这一点&#xff0c;在无数次中键入了一个更详细的模仿表达式之一。 有问题的语句是一个doAnswer(Answer)构造&#xff0c;使用涉及到的静态导入和泛型代码进行编码总是很麻烦。 尽…

【渝粤教育】电大中专建筑力学作业 题库

1.当变形在所研究的问题中成为主要因素时一般就不能再把物体看作是刚体了。 A.错误 B.正确 正确 正确答案&#xff1a;左边查询 学生答案&#xff1a;B 2.外效应使物体的形状发生变化。 A.错误 B.正确 正确 正确答案&#xff1a;左边查询 学生答案&#xff1a;A 3.约束必然对被…

linux系统运行powerbi,使用 Power BI 服务 - Power BI | Microsoft Docs

快速入门 - 使用 Power BI 服Quickstart - Getting around in Power BI service10/12/2020本文内容备注Power BI 正在转换为新外观&#xff0c;文档中的某些图像可能与服务中显示的图像不匹配。Power BI is moving to a new look, and some images in the documentation may no…

【渝粤教育】电大中专微生物与寄生虫基础作业 题库

1.属于真核型微生物的是&#xff08;&#xff09;。 A.衣原体 B.放线菌 C.真菌 D.病毒 E.支原体 错误 正确答案&#xff1a;左边查询 学生答案&#xff1a;B 2.下列哪一个特点不是微生物的共有特点&#xff08;&#xff09; A.结构简单 B.肉眼不直接可见 C.需要借助显微镜观察 …

ue 编写linux脚本,UltraEdit23 sh文件 (shell脚本)着色

网上有UltraEdit早期版本的添加方法&#xff1b;但是这新版本有点不同&#xff1b;方法如下&#xff1a;安装后&#xff0c;到AppData\Roaming\IDMComp\UltraEdit\wordfiles 目录下添加UnixShell.uew&#xff1b;文件内容和网上的一样&#xff1a;/L20"UNIX Shell Scripts…

JMetro版本4.8已发布

再一次问好&#xff01; JMetro Java 4.8版JavaFX主题刚刚发布。 我们即将接近下一个主要版本的版本5.0。 这是已经过彻底改造的旧样式&#xff1a; 日期选择器 树视图 以及经过调整或更改了CSS结构的旧版本&#xff1a; 表格检视 列表显示 组合框 评级控制 4.8版详细…

【渝粤教育】电大中专新媒体营销实务 (3)作业 题库

1.&#xff08; &#xff09;对新媒体的定义为&#xff1a;“以数字信息技术为基础&#xff0c;以互动传播为特点&#xff0c;具有创新形态的媒体。” A.新传媒产业联盟秘书长王斌 B.华纳兄弟总裁施瓦茨威格 C.联合国教科文组织 正确 正确答案&#xff1a;左边查询 学生答案&am…

【渝粤教育】电大中专测量学作业 题库

1.测量学是研究地球的形状和大小以及确定地面点&#xff08;&#xff09;位置的科学。 A.平面 B.空间 C.曲面 D.高程 错误 正确答案&#xff1a;左边查询 学生答案&#xff1a;A 2.测量学中的水准面是一个&#xff08;&#xff09;。 A.斜平面 B.水平面 C.竖直面 D.曲面 正确 正…

【渝粤教育】电大中专电商运营实操 (14)作业 题库

1.电子商务最重要的是“商务”&#xff0c;而网站只不过是电子商务的后台支撑。 &#xff08; &#xff09; A.正确 B.错误 错误 正确答案&#xff1a;左边查询 学生答案&#xff1a;未作答 2.网上购物仅仅是电子商务的一小部分&#xff0c;而完整的电子商务过程是一切利用现代…

linux view查看日志命令,linux查看日志文件内容命令tail、cat、tac、head、echo、vi

linux查看日志文件内容命令tail、cat、tac、head、echotail -f test.log你会看到屏幕不断有内容被打印出来. 这时候中断第一个进程Ctrl-C,---------------------------linux 如何显示一个文件的某几行(中间几行)从第3000行开始&#xff0c;显示1000行。即显示3000~3999行cat fi…

【渝粤教育】电大中专电商运营实操作业 题库

1.电子商务最重要的是“商务”&#xff0c;而网站只不过是电子商务的后台支撑。 &#xff08; &#xff09; A.错误 B.正确 错误 正确答案&#xff1a;左边查询 学生答案&#xff1a;未作答 2.网上购物仅仅是电子商务的一小部分&#xff0c;而完整的电子商务过程是一切利用现代…