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

jdk11换jdk8版本

在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

jdk11换jdk8版本

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

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

相关文章

IntelliJ IDEA 的 Project Structure 窗口中的 Artifacts 勾选 Include in project build

文章目录在 war 工件勾选 Include in project buildBuild Project/ModuleRebuild Project/Module在 war exploded 工件勾选 Include in project build在 war 工件勾选 Include in project build war 工件处勾选 Include in project build&#xff0c;表示在构建项目/模块之后&a…

华为linux系统能用Cad么,华为平板能装cad画图吗 华为平板可以用cad软件吗?

华为平板可以用cad软件吗&#xff1f;华为平板是可以安装cad画图软件的&#xff0c;不管是什么设备&#xff0c;关键是操作系统符合下面的要求&#xff0c;就可以安装&#xff1a; 1、微软的window 系列操作系统 2、苹果的电脑操作系统 3、Linux系统华为mate平板可以安装CAD画图…

java客户端api文档_Java 11:新的HTTP客户端API

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

linux date字符串日期格式,Linux中date用法

1、命令&#xff1a;date2、命令功能&#xff1a;date 可以用来显示或设定系统的日期与时间。3、命令参数-d&#xff1a;显示字符串所指的日期与时间。字符串前后必须加上双引号&#xff1b;-s&#xff1a;根据字符串来设置日期与时间。字符串前后必须加上双引号&#xff1b;-u…

jar/war/ear文件的区别

参阅&#xff1a; https://www.cnblogs.com/perfy/p/3597852.html https://blog.csdn.net/weixin_29022299/article/details/114063154 https://www.cnblogs.com/uriel/p/4874383.html https://www.cnblogs.com/sagech/p/4907163.html https://www.cnblogs.com/nizuimeiabc1/p/…

vim 命令模式 筛选_10个步骤的筛选器模式

vim 命令模式 筛选过滤器是仅在某些情况下应应用的模式。 在原始帖子中 &#xff0c;我提供了一个非常简单的示例&#xff0c;旨在演示如何应用它。 在这篇文章中&#xff0c;我提供了一个更详细的示例&#xff0c;该示例还旨在说明何时以及为什么应用它。 介绍 该职位包括以…

Maven的scope详解

文章目录依赖范围介绍compiletestprovidedruntimesystemimport依赖传递依赖范围与 classpath 的关系表参考依赖范围介绍 maven 项目不同的阶段引入到classpath中的依赖是不同的&#xff0c;例如&#xff0c;编译时&#xff0c;maven 会将与编译相关的依赖引入classpath中&…

linux下编译与运行,Linux操作系统驱动编译与运行是怎样的?

一、手工加载测试1、insmod 。/key_test。ko 加载驱动模块到内核2、cat /proc/modules |grep key_test 查看key_test模块在内核中的地址&#xff0c;不加过滤器可以看到全部加载的模块。3、lsmod 显示模块&#xff0c;这时可以看到所有的模块名字&#xff0c;后面跟的是主设备号…

spring mvc 提示_Spring BootHibernate提示

spring mvc 提示1.概述 Hibernate无需介绍。 它是Java中最受欢迎的ORM。 同样&#xff0c;Spring Boot是Java中功能最强大&#xff0c;最易于使用的框架。 本教程与Hibernate或Spring Boot无关&#xff0c;其中有大量的内容。 我们将研究在将它们一起使用时可能会遇到的一些…

异常:Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

执行 JDBC 有关代码时&#xff0c;报如下的异常&#xff1a; 原来是配置文件的内容有问题&#xff1a;

linux 端口tnpl,利用Python找出9个连续的空闲端口

这篇文章主要介绍了Python找出9个连续的空闲端口的方法&#xff0c;感兴趣的小伙伴们可以参考一下一、项目需求安装某软件&#xff0c;配置时候需要填写空闲的端口。查看5个平台的某个端口是否被占用5个平台为windows, linux, aix, hp, solaris二、实现方案有两种1、利用 pytho…

go比java快多少_Java 11快多少?

go比java快多少尽管大多数开发人员仍然使用Java 8 &#xff0c;但Java 11还是在不久前发布的。 让我们看看其中哪个对OptaPlanner更快。 找出答案的最佳方法当然是运行OptaPlanner基准测试。 本文是我们针对Java 8的类似文章的后续文章 。 基准方法 为了运行基准测试&#xff…

部署项目,所谓“部署”到底是在干什么?

第一步&#xff1a;把项目部署包放在服务器指定目录&#xff08;webapps&#xff09;下&#xff0c;让服务器可以找到项目资源&#xff1b;或者通过配置文件让服务器可以找到项目资源。 第二步&#xff1a;把项目的访问路径、资源映射等数据加载进内存中&#xff0c;这样客户端…

linux查看文件使用情况,linux查看文件句柄使用情况

Linux 3.2.0-23-generic (linux) 09/08/2014 _x86_64_ (8 CPU)02:01:55 PM dentunusd file-nr inode-nr pty-nr02:02:05 PM 38465 1568 25731 402:02:15 PM 38465 1568 25728 402:02:25 PM 38465 1536 25723 4Average: 38465 1557 25727 4输出项说明&#xff1a;kbmemfree&…

Update resources 和 Update classes and resources 的特殊情况

resources目录的文件删除了&#xff0c;不会更新部署包中的相关文件&#xff1b;但是会更新编译输出目录下的相关文件&#xff08;在 run 和 debug 模式下&#xff09; webapp 目录的文件删除了&#xff0c;不会更新部署包中的相关文件&#xff08;在 run 和 debug 模式下&…

java堆内与堆外数据交互_Java:汇总堆外数据

java堆内与堆外数据交互探索如何以最小的垃圾回收影响和最大的内存利用率创建堆​​外聚合。 使用Java Map&#xff0c;List和Object创建大型聚合通常会产生大量堆内存开销。 这也意味着&#xff0c;一旦聚合超出范围&#xff0c;垃圾收集器将必须清理这些对象。 阅读这篇简短…

linux内核cpu负载计算,CPU 负载 — The Linux Kernel documentation

CPU 负载Linux通过/proc/stat和/proc/uptime导出各种信息&#xff0c;用户空间工具如top(1)使用这些信息计算系统花费在某个特定状态的平均时间。例如&#xff1a;$ iostatLinux 2.6.18.3-exp (linmac) 02/20/2007avg-cpu: %user %nice %system %iowait %steal %idle10.01 0.00…

IntelliJ IDEA 中的Java Web项目的资源文件复制新增如何更新到部署包中?

文章目录resources目录下的文件复制新增webapp目录的文件复制新增IntelliJ IDEA 中的Java Web项目的资源文件如果复制新增&#xff0c;正常的重新部署、重启服务器、update resources&#xff0c;并不会更新到部署包中&#xff0c;必须要特殊处理才行。 resources目录下的文件…

apache.camel_Apache Camel 2.23发布

apache.camel昨天发布了Apache Camel 2.23 &#xff0c;其中最值得注意的新功能是对Spring Boot 2.1的支持&#xff0c;我们还改进了启动器组件以包括更多的元数据&#xff0c;并对改进的Spring Boot自动配置进行了优化。 此版本主要是一个大的错误修复版本和一些其他小的新增…

在linux上安装mysql5.6,在linux(Centos 7以上版本亲测)上安装mysql5.6

./scripts/mysql_install_db --usermysql --datadir/usr/local/mysql/data/mysql如果执行报错[rootdc1atmpapp12 mysql]# ./scripts/mysql_install_db --usermysql --datadir/usr/local/mysql/data/mysql FATAL ERROR: please install the following Perl modules before execu…