使用 IntelliJ 调试 Java Streams_第1页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、使用 intellij 调试 java streamsstreams 十分强大,并且能够用容易几行代码实现你所期望的功能要点。它们正常运行时十分流畅优雅,但运行不符合预期时却让人苦不堪言。让我们学习一下如何用 intellij 调试你的 java streams 代码,并洞察 stream 的中间操作。 在这篇文章中,我将在例子里用到 sakila 样本数据库和 speedment stream orm 框架。 原理 让我们从一个容易的 stream 开头,我们可以在 intellij 为其创建一个基本的 stream debugger: .sorted() .collect(tolist()

2、; 上面的代码创建了一个由字符串 a、b、c组成的 stream。紧接着对这个 stream 举行 sorted() 操作,从而创建了一个新的 stream(起码在 java 8-10 中是这样),其中的元素是第一个 stream 的元素按字母排序的结果。也就是说,其次个 stream 包含a、b、c三个元素。最后,这些将元素放到一个 list 中。 stream s0 = stream.of("c", "b", "a"); / "c", &q

3、uot;a", "b" stream s1 = s0.sorted(); / "a", "b", "c" list strings = s1.collect(tolist(); / a, b, c 这大体上演示了 stream debugger 如何工作。它将一个 stream 管道操作分割成多个代码片段,一步一步地调用中间运算操作,从而可以保留每一步操作的元素内容以供分析。 stream.of("c&quo

4、t;, "b", "a") .peek(savestep(0) .sorted() .peek(savestep(1) .collect(tolist(); / the final result is saved to step 2 注重:真正的技术实现并不是上面这样,它只是提供了很好的概览。 在 intellij’s debugger 中有越发形象化的表示: 它简洁明白地展示了 stream 管道里的每个中间操作详情,以及最后结果。 调用 想调用 stream debugger 的话,首先要在 str

5、eam 定义处设置断点: 然后,启动调试会话(以 debug 模式运行): 当到达断点时,可以按指定的按钮(可能有些不好找)来调用 stream debugger,下面用红圈标出: 这样就打开了 stream debugger,和上文所展示的一样。 数据库 streams 我将用法 speedment(stream orm),它允许通过标准的 java streams 操作来查询数据库,因此也能通过 intellij 来调试操作。可以通过 speedment initializer 来创建一个 speedment 项目。 可以通过下面方式创建一个 java 应用。 speedment app

6、= new sakilaapplicationbuilder() .withpassword("sakila-password") / replace with your own password .build(); filmmanager films = app.getorthrow(filmmanager.class); 现在我们可以对数据库film表举行 stream 操作。下面是个例子: list map = films.stream() .filter(film.length.equal(60) .sorted(film.rating.revers

7、ed() .collect(tolist(); 代码将从全部 film(电影) 对象中筛选出长度为 60 分钟的,然后通过 film.rating(评级)对这些 film 对象举行排序(降序),最后将全部元素放入一个 list。 我们调用 stream debugger 时,会看到下面这张图: 我们可以看到,初始 stream 中有 1000 部电影。筛选操作后,只剩 8 部电影,紧接着排序并放到一个 list。 计算统计 假设我们要计算全部 pg-13 级别(电影分级制度中的一种)电影的最小时长、最大时长以及平均时长。代码如下: intsummarystatistics stat = films.stream() .filter(film.rating.equal("pg-13") .maptoint(film.length.asint() .summarystatistics(); stream debugger 展示如下: 可以看出,我们可以与 stream debugger 交互,并在 stream 管道中点击元素来高亮显示,也可以在元素间滚动查看单个操作步骤。 speedment 优化了数据库 stream 中间操作,并将其融合进 s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论