zoukankan      html  css  js  c++  java
  • IntelliJ IDEA 调试 Java 8 Stream,实在太香了!

    前段时间,栈长发布了一篇关于 Java 8 Optional.map 的实用文章,留言区就有的人说 Java 8 的语法糖不方便调试,还要视情况使用。

    留言区也有人说 IntelliJ IDEA 早已支持 Java 8 Stream 调试,因为我平时也很少调试,那么我就以 IntelliJ IDEA 来演示下如何调试 Java 8 中的 Stream 链式调用吧。

    先写一段 Java 8 Stream 示例:

                             /*
    * 来源公众号:Java技术栈 
    */
    public static void main(String[] args) {
        Stream.of(100, 200, 300, 400, 500)
                .mapToLong(e -> e * 10)
                .filter(e -> e > 2000)
                .forEach(System.out::println);
    }  

    这里只演示了一种 Stream 创建方式,Java 8 创建 Stream 的 10 种方式请点击 这里 进行阅读。

    这个程序是先构建一个 5 个数字的 Stream, 然后再对每个数字 * 10,再筛选出大于 2000 的数字进行打印。

    如何调试每个链式调用的过程呢?

    先在第一行打个断点,然后进入调试模式运行,当断点进入时,点击调试窗口的 Trace Current Stream Chain 按钮:

    然后自动进入当前 Stream 跟踪调试窗口,上面会展示每个链式调用的选项卡,点击各个选项卡可以看对应每步的跟踪结果。

    如下面所示:

    也可以点击左下角的 Flat Mode 进入扁平模式,一次性展示所有跟踪结果:

    OK,Java 8 Stream 的调试不是问题了, 但我并没有找到像 Optional 链式调用的调试方式。

    比如下面一段 Optional 示例:

                             /*
    * 来源公众号:Java技术栈 
    */
    public static void main(String[] args) {
        String string = Optional.of("hi,")
                .map(e -> e + "Java")
                .map(e -> e + "技术")
                .map(e -> e + "栈").get();
        System.out.println(string);
    }  

    调试如图所示:

    可惜, Trace Current Stream Chain 按钮是灰色状态,不能进入,因为那个按钮只能被 Stream 调试所用。

    那像这种非 Stream 链式调用怎么调试呢?

    断点进入后,可以选中需要调试的部分链式代码片断,然后右键选中 Evaluate Expression 菜单(ALT + F8)进入表达式计算窗口:

    点击 Evaluate 按钮开始计算:

    计算无误,该表达式还可以自由编辑,非常强大。

    虽然没有像 Stream 这样专属的调试面板,使用 Evaluate Expression 也能达到调试链式调用的目的吧。关于这个,你还有其他调试方案么?欢迎留言分享!

    好了,本次的分享就到这里了,希望对大家有用。觉得不错,在看、转发分享一下哦~

    关注Java技术栈微信公众号,栈长将继续分享好玩的 Java 技术,公众号第一时间推送,在公众号后台回复:IDEA,可以获取历史 IDEA 教程,都是干货。

    近期热文推荐:

    1. Java 15 正式发布, 14 个新特性,刷新你的认知!!

    2. 终于靠开源项目弄到 IntelliJ IDEA 激活码了,真香!

    3. 我用 Java 8 写了一段逻辑,同事直呼看不懂,你试试看。。

    4. 吊打 Tomcat ,Undertow 性能很炸!!

    5. 《Java开发手册(嵩山版)》最新发布,速速下载!

    觉得不错,别忘了随手点赞+转发哦!

  • 相关阅读:
    js 时间相关函数
    javascript面向对象:继承、多态
    面向对象相关
    reset.css css重置公共样式
    开通博客园第一天。
    vue 和 react 路由跳转和传参
    前端密码加密方式
    react组件回顶部
    移动端使用rem方法
    用rekit创建react项目
  • 原文地址:https://www.cnblogs.com/huilixieqi/p/13793372.html
Copyright © 2011-2022 走看看