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版本

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

  1. 棉花糖多少钱_如何在6.0棉花糖及更高版本中访问Android的正在运行的应用程序列表...

    棉花糖多少钱 In Android 5.x and below, accessing your list of running apps was simple-you'd jump into Sett ...

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

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

  3. linux cmake 安装mysql5.5.11_以及更高版本_linux cmake 安装mysql5.5.11,以及更高版本

    1.下载mysql5.5.12和cmake wget http://mirrors.sohu.com/mysql/MySQL-5.5/mysql-5.5.12-linux2.6-i686.tar.gz ...

  4. python安装matplotlib需要c编译_在Python 3.9上安装matplotlib提示需要FreeType更高版本的解决...

    在Python 3.9(在Deepin系统中采用源码安装Python 3.9版本的方法)上安装matplotlib提示需要FreeType 2.3或更高版本,可以将MPLLOCALFREETYPE环境 ...

  5. ipad1最新版本_如何将您的iPad更新到最新版本的iPadOS

    ipad1最新版本 It's a good idea to keep your iPad's operating system (iPadOS) up to date. iPadOS updates ...

  6. Dubbo 高危反序列化漏洞,存在远程代码执行风险,建议及时升级到2.7.7或更高版本!...

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 以下内容转载自安全客,原文链接:https://www. ...

  7. Maven编译项目时报错:不再支持源选项 5。请使用 6 或更高版本。 不再支持目标选项 1.5。请使用 1.6 或更高版本。

    在使用Maven编译项目时报错: 不再支持源选项 5.请使用 6 或更高版本. 不再支持目标选项 1.5.请使用 1.6 或更高版本. 在项目pom.xml文件中增加maven编译的jdk版本设置,m ...

  8. polybase配置 sql_安装SQL Server 2016时提示“Polybase要求安装Oracle JRE 7更新51或更高版本”错误的解决方式...

    今天给客户安装sql,客户非要坚持要2016版本,SQL2014后就没有太好用的版本,但客户坚持要用,我也就给客户安装,不过安装的时候出现了以下错误:以前安装也出现过,没有写下一点儿的教程,今天就写下 ...

  9. 错误: -source 1.6 中不支持 diamond 运算符 (请使用 -source 7 或更高版本以启用 diamond 运算符)

    今天晚上在AS上运行校长项目时,报错如下: Error:(71, 35) 错误: -source 1.6 中不支持 diamond 运算符(请使用 -source 7 或更高版本以启用 diamond ...

最新文章

  1. drupal建设多语言站点之四:不同语言的站点名称
  2. 测试掌握的Linux解压,轻松掌握Linux压缩/解压文件的方法
  3. 负载均衡探测器lbd
  4. Ardino基础教程 13_温度传感器
  5. ce5e.cn fadian.php,空包网 PHP mysql
  6. linux安装weblogic9,linux_weblogic9_安装说明.doc
  7. 【C++】 C++标准模板库(十一) 优先队列
  8. angularjs 整合bootstrap 时间控件
  9. JPA关系映射系列一:one-to-one外键关联
  10. 开源免费的.NET图像即时处理的组件ImageProcessor
  11. 视觉SLAM笔记(4) SLAM的数学表述
  12. python中静态变量和静态方法_从静态变量引用静态方法
  13. ##(C语言) CSP 201612-2 工资计算(打表法)(100分)
  14. 【Proteus仿真】220V转5V向单片机供电
  15. 【计算机组成原理】运算器组成实验
  16. Javashop开启全新微服务时代
  17. 软件工程经济学工程认证作业整理
  18. windows10 开启热点
  19. JavaScript 销毁对象
  20. mysql8修改密码报:Your password does not satisfy the current policy requirements

热门文章

  1. E. Colorings and Dominoes(未解决)
  2. I - Washing clothes
  3. 牛客网【每日一题】5月1日题目 [SCOI2012]滑雪与时间胶囊
  4. CodeForces 516E Drazil and His Happy Friends(数学+最短路)
  5. CF1270H Number of Components(线段树)
  6. 周末狂欢赛3(跳格子,英雄联盟,排序问题)
  7. CF1580B Mathematics Curriculum(笛卡尔树、树形dp)
  8. jzoj1402-偷懒的小X【贪心】
  9. jzoj3337-[NOI2013模拟]wyl8899的TLE【字符串hash,二分】
  10. P3441-[POI2006]MET-Subway【图论,贪心】