使用IntelliJ调试Java流

流功能非常强大,只需几行就可以捕获您预期功能的要点。 但是,就像它们在一切正常工作时一样平滑,就像它们在表现不正常时一样令人痛苦。 了解如何使用IntelliJ调试Java Streams并深入了解Stream的中间操作。

在本文中,我将在示例中使用Sakila示例数据库和Speedment Stream ORM 。

原则

让我们从一个简单的Stream开始,我们可以使用它在IntelliJ中建立Stream调试器的基础知识:

List<String> strings = Stream.of("C", "A", "B").sorted().collect(toList());

上面的代码首先创建一个初始Stream ,该初始Stream
String元素"C", "A", "B" 。 然后,将中间操作sorted()应用于第一个Stream ,从而(至少在Java 8-10中)创建一个新的Stream ,其中初始流中的元素根据其自然顺序进行排序。 即第二个流将包含元素"A", "B", "C" 。 最后,将这些元素收集到List

上面的代码等效于:

Stream<String> s0 = Stream.of("C", "B", "A"); // "C", "A", "B"
Stream<String> s1 = s0.sorted();              // "A", "B", "C"
List<String> strings = s1.collect(toList());  // [“A”, “B”, “C”]

基本上,这就是Stream调试器的操作方式。 它将流管道分成较小的段,并逐步调用不同的中间运算符,同时保留所分析的每个步骤的元素:

Stream.of("C", "B", "A").peek(saveStep(0)).sorted().peek(saveStep(1)).collect(toList()); // The final result is saved to step 2

注意:这在技术上并不完全正确,但是它提供了一个很好的总体轮廓。

在外观上,在IntelliJ的调试器中看起来像这样:

IntelliJ

这样可以清晰,简洁地查看每个中间操作之间Stream管道内部发生的情况,并显示Stream的最终结果。

调用方式

通过首先设置定义了Stream的断点来调用流调试器:

IntelliJ

然后,启动调试会话:

IntelliJ

当遇到断点时,可以通过按下其指定的(可能是有些隐藏的)按钮来调用Stream调试器,如下面的红色圆圈所示:

IntelliJ

如本文前面所示,这将拉起流调试器。

数据库流

我将使用流ORM Speedment,该流允许使用标准Java流查询数据库,因此,也可以使用IntelliJ调试这些流。 可以使用Speedment 初始化程序设置一个Speedment项目。

Java应用程序本身可以这样设置:

Speedment app = new SakilaApplicationBuilder().withPassword("sakila-password") // Replace with your own password.build();FilmManager films = app.getOrThrow(FilmManager.class);

现在,我们可以流式传输数据库表“ film”。 例如这样:

List<Film> map = films.stream().filter(Film.LENGTH.equal(60)).sorted(Film.RATING.reversed()).collect(toList());

这将过滤掉所有Film具有长度对象等于60分钟,然后进行排序那些Film根据对象
Film.RATING (降序),然后将这些元素收集到List

调用Stream调试器时,将看到以下内容:

IntelliJ

可以看出,初始流中有1,000部电影。 在执行筛选操作之后,仅剩下8部影片,随后将其分类并收集到List

计算统计

假设我们要计算所有额定为PG-13电影的最小,最大和平均长度。 可以这样完成:

IntSummaryStatistics stat = films.stream().filter(Film.RATING.equal("PG-13")).mapToInt(Film.LENGTH.asInt()).summaryStatistics();

在Stream调试器中如下所示:

IntelliJ
可以看出,可以与流调试器进行交互并单击元素,从而突出显示它们在流管道中的路径。 也可以在各个步骤的元素之间滚动。

速度通常可以优化数据库Stream中的中间操作,并将这些步骤合并到SQL查询中。 但是,使用Stream调试器时,不会进行此类优化,并且我们能够看到流管道中的所有步骤。

结论

Stream调试器是一个隐藏的瑰宝,在使用Streams时可能会有很大帮助。

我认为IntelliJ团队提出了一个非常好的功能。

在此处下载Speedment。 在此处下载IntelliJ。

翻译自: https://www.javacodegeeks.com/2018/09/debugging-java-streams-with-intellij.html

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

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

相关文章

四川对口高职本科学校计算机,2018四川对口高职本科学校有哪些

相信很多想要报考四川单招对口高职的同学&#xff0c;都是非常的关心四川对口高职本科学校有哪些的&#xff0c;小编整理了相关信息&#xff0c;希望会对大家有所帮助!四川文化艺术学院(Sichuan University of Culture and Arts)&#xff0c;简称“川文艺”&#xff0c;是经教育…

echart 饼图每一块间隙_花10分钟做酱香饼,简单方便又美味,酥脆咸香比买的还要好吃...

花10分钟做酱香饼&#xff0c;简单方便又美味&#xff0c;酥脆咸香比买的还要好吃前几年&#xff0c;在单位附近有一家只做酱香饼的小店&#xff0c;刚开张的时候排很长队&#xff0c;我为了一块酱香饼排队半小时。后来买酱香饼的人少了&#xff0c;我三天两头买一块酱香饼解馋…

html 边框轮廓,CSS半圈(边框,仅轮廓)

小编典典您可以使用border-top-left-radius和border-top-right- radius属性根据框的高度(和添加的边框)在框上四角。然后在框的顶部/右侧/左侧添加边框以达到效果。干得好&#xff1a;.half-circle {width: 200px;height: 100px; /* as the half of the width */background-col…

人类一败涂地做图教程_《人类一败涂地》形象绘画技巧图文指南

第2页&#xff1a;展开第四步进行对人物细节描边处理&#xff0c;使粗细不同的变得一致&#xff0c;还是拉近镜头&#xff0c;利用底色扣细致。最重要的一点来了&#xff01;不管你画成什么样子&#xff0c;如果你在护理细节的过程中镜头过于拉进并且没有某一部位时模型会变成黑…

Spring Data Pivotal Gemfire教程

1. Spring Data Pivotal Gemfire –简介 在这篇文章中&#xff0c;我们将介绍有关Spring Data Pivotal Gemfire的全面教程。 Pivotal Gemfire是由Apache Geode支持的内存中数据网格解决方案。 使用Pivotal Gemfire构建的应用程序使您可以在分布式服务器节点之间轻松扩展系统。 …

计算机诞生发展分类特点及应用,计算机的诞生与发展,及其特点

计算机基本常识一、计算机的概念&#xff1a;计算机是一种能迅速而高效的自动完成信息处理的电子设备&#xff0c;它能按照程序对信息进行加工、处理、存储。二、计算机的诞生与发展1、诞生&#xff1a;1946年&#xff0c;美国为计算弹道轨迹而研制成功了世界第一台计算机。2、…

404 单页应用 报错 路由_通过 Laravel 创建一个 Vue 单页面应用(五)

文章转发自专业的Laravel开发者社区&#xff0c;原始链接&#xff1a;https://learnku.com/laravel/t/34858我们在第4部分完成了编辑用户的功能&#xff0c;并且学习了如何使用 v-model 来监听视图组件中用户信息的更改。现在我们可以开始构思删除用户功能&#xff0c;以及删除…

使用计算机求解雷达方程,关于雷达方程

满意答案zjit99402014.01.27采纳率&#xff1a;41% 等级&#xff1a;12已帮助&#xff1a;2803人带宽校正系数是Co而不是Do.我们知道雷达接收到回波信号后&#xff0c;必须进行信号处理&#xff0c;使中频接收机的输出端(检波器的输入端)输出的信号和噪声功率比(简称信噪比)…

hook 与aspectj_将AspectJ与NetBeans平台开发集成

hook 与aspectj您是否正在使用NetBeans平台开发项目&#xff1f; 您愿意使用AspectJ来使用AOP吗&#xff1f; 您不知道如何将AspectJ编译器集成到NetBeans的内部版本中&#xff1f; 如果您的回答是“是”&#xff0c;则此帖子适合您。 我决定写这篇技术文章&#xff0c;是因为…

考试用计算机反思800字,考试反思作文800字

【考试】作者&#xff1a; 武佳硕2017年 5月6日 星期六 晴今天我们进行了一场在英华初中免费生考试前测试。虽然这次考试&#xff0c;不会算我们的真实成绩&#xff0c;但是老师要测我们的考试状态&#xff0c;一开始我还自信满满地认为我能考好&#xff0c;没想到我居然靠得一…

静茹docker容器的几种方法_1-容器和docker基础知识

[TOC]## 一 容器的概念### 1.什么是容器&#xff1a;容器是在隔离的环境里面运行的一个进程&#xff0c;这个隔离的环境有自己的系统目录文件&#xff0c;有自己的ip地址&#xff0c;主机名等。也可以说&#xff1a;容器是一种轻量级虚拟化的技术。### 2.容器相对于kvm虚拟机的…

JSON-B非对称属性绑定

JSON-B规范定义了诸如JsonbProperty或JsonbTransient类的绑定批注&#xff0c;以声明方式将Java对象映射到JSON&#xff0c;然后再映射回JSON。 这些注释可以“非对称地”用于定义序列化和反序列化的不同处理。 如果在Java属性上或在getter和setter上标注JSON Binding批注&…

怎么利用计算机计算潮流计算,电力系统潮流计算的目的是什么

电力系统潮流计算的目的是什么潮流计算是研究电力系统稳态运行情况的一种基本电气计算&#xff0c;常规潮流计算的任务是根据给定的运行条件和网路结构确定整个系统的运行状态&#xff0c;如各母线上的电压(幅值及相角)、网络中的功率分布以及功率损耗等。潮流计算的结果是电力…

7500 cpuz跑分 i5_小米Pro笔记本亮相跑分网站:处理器包含AMD Zen3、11代酷睿

2020年已经接近尾声&#xff0c;随之而来的将会是一大波新品发布会&#xff0c;不仅是手机&#xff0c;笔记本电脑、显卡等产品也会有新品亮相。一年一度的CES 2021也即将开幕&#xff0c;届时英特尔、英伟达、AMD等知名厂商也都将出席活动。据悉&#xff0c;英特尔将推出11代酷…

2016年计算机网考,2016年电大:计算机网考(全)练习题.doc

2016年电大&#xff1a;计算机网考(全)练习题用来给电子工作表中的行号进行编号的是______。数字在Excel中&#xff0c;输入数字作为文本使用时&#xff0c;需要输入作为先导标记的字符是______。单引号电子工作表中每个单元格的默认格式为______。常规不包含在Excel的格式工具…

2能不用cuda_洗洁精不用花钱买,自己在家就能做,成本2毛钱,比买的更好用

点击上面“妙招姐”免费关注图文版&#xff1a;哈喽大家好&#xff0c;我是妙招姐&#xff0c;洗洁精是我们生活中的必须品&#xff0c;但用洗洁精来清洗餐具或水果等和食物相关的东西多多少少都会有残留&#xff0c;那么今天妙招姐就来教大家用橘子皮来自己制作洗洁精&#xf…

Apache Ignite,Hazelcast,Cassandra和Tarantool之间的主要区别

Apache Ignite在世界范围内得到广泛使用&#xff0c;并且一直在增长。 诸如Barclays&#xff0c;Misys&#xff0c;Sberbank&#xff08;欧洲第三大银行&#xff09;&#xff0c;ING&#xff0c;JacTravel之类的公司都使用Ignite来增强其体系结构的各个部分&#xff0c;这些部分…

n.html id=198,YPE htmlhtml lang=enhead data-n-head-ssrtitle data-n-=true小程序获取不到unionid 微信开放社区...

我们的小程序和公众号绑定在同一开放平台&#xff0c;隶属于同一主体&#xff0c;新用户在经过公众号授权登陆后&#xff0c;在小程序的登陆接口获取的信息只有session_key和open_id&#xff0c;没有unionId&#xff0c;请问这是什么问题我们已经在用户登陆小程序之前进行了同一…

centos模拟post请求_java模拟post和get请求(2019/10/25)

一、http含义的介绍1.http协议是超文本传输协议--具体含义请百度2.基于tcp/ip协议--注意和udp的区别3.无状态---本次请求记不住以往请求的状态4.无连接--每次连接只处理一个请求5.媒体独立二、请求报文的组成部分请求行 请求方式 请求url http协议版本请求头关于请求头和响应头…

浙江计算机二级报名步骤,浙江2016年9月计算机二级考生报名流程

导读&#xff1a;2016年9月浙江全国计算机二级考试网上报名时间为2016年6月1日-6月19日;现场缴费确认为6月1日6月20日&#xff0c;具体报名流程请看如下信息。想了解更多相关信息请持续关注我们应届毕业生考试网!(一)注册账号和登录1)考生首次登录系统需要注册登录通行证&#…