欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > java >内容正文

java

使用IntelliJ调试Java流

发布时间:2023/12/3 java 70 豆豆
生活随笔 收集整理的这篇文章主要介绍了 使用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的调试器中看起来像这样:

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

调用方式

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

然后,启动调试会话:

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

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

数据库流

我将使用流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调试器时,将看到以下内容:

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

计算统计

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

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

在Stream调试器中如下所示:


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

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

结论

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

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

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

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

创作挑战赛新人创作奖励来咯,坚持创作打卡瓜分现金大奖

总结

以上是生活随笔为你收集整理的使用IntelliJ调试Java流的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。