IntelliJ IDEA中如何优雅的调试Java Stream操作

Stream操作是Java 8推出的一大亮点!虽然java.util.stream很强大,但依然还是有很多开发者在实际工作中很少使用,其中吐槽最多的一个原因就是不好调试,一开始确实是这样,因为stream这样的流式操作在DEBUG的时候,是一行代码,直接下一步的时候,其实一下就过去了好多操作,这样我们就很难判断到底是里面的哪一行出了问题。不过,现在的话,在强大的IDEA插件支持下,stream的调试其实也没那么难了,下面就来学习一下在IDEA中如何调试stream操作吧。

插件:Java Stream Debugger

如果你用的IDEA版本比较新的话,这个插件已经是自带的了,就不需要安装了。如果还没安装的话,就手工安装一下,然后继续下面的操作。

本文收录在了我正在连载的《玩转IDEA专栏》,该系列该用电子书的方式编写,如果想要沉浸式阅读学习的话,可以访问Web版本:https://www.didispace.com/idea-tips/

file

调试Stream操作

视频演示:点击这里查看

先来看下面这样的这段代码:

public class StreamTest {

    @Test
    void test() {
        List<String> list = List.of("blog.didispace.com", "spring4all.com", "openwrite.cn", "www.didispace.com");

        List<String> result = list.stream()
                .filter(e -> e.contains("didispace.com"))
                .filter(e -> e.length() > 17)
                .toList();

        System.out.println(result);
    }

}

这段代码的逻辑是通过stream去过滤list集合中的元素,由于有两个filter,所以当出现问题的时候,可能不知道具体是哪个filter中出了问题。

借助强大的IDEA,我们在遇到stream的时候,只需要点击下图中的按钮:

此时会弹出一个Stream操作的跟踪窗口:

该窗口中的标签就是这个stream操作的每一步,我们可以通过点击标签去查看每一步执行前和执行后的结果去判断这里的filter是否执行正确。

是不是一下感觉简单了很多呢?好了,今天的分享就到这里,如果你还没有用过这个调试功能的话, 赶紧打开IDEA试一试吧!如果您学习过程中如遇困难?可以加入我们超高质量的技术交流群,参与交流与讨论,更好的学习与进步!

欢迎关注我的公众号:程序猿DD。前沿技术早知道,弯道超车有希望!积累超车资本,从关注DD开始!

### 如何使用 IntelliJ IDEA 创建 Java 项目练习 LeetCode 题目 #### 准备工作 为了更高效地在本地环境中解决 LeetCode 上的算法问题,在 IntelliJ IDEA 中创建一个专门用于存储 LeetCode 解决方案的新项目是一个不错的选择。这不仅有助于保持代码整洁有序,还能简化调试过程。 #### 新建项目 启动 IntelliJ IDEA 后,选择 `File` -> `New` -> `Project...` 来开启新项目的向导界面。在这里可以选择基于 Maven 或 Gradle 的构建工具来管理依赖项;对于大多数情况而言,Maven 是较为常见的选项[^1]。 #### 安装插件 安装 LeetCode Editor 插件能够极大地方便用户直接从 IDE 访问并提交解题思路至 LeetCode 平台。尽管该插件可能存在某些局限性,但对于日常练习来说已经足够实用[^2]。 #### 自定义模板设置 为了让每次新增加一道题目时自动按照特定格式生成源文件,可以在 Settings (Preferences on macOS) 下找到 `Editor` -> `File and Code Templates` 进行个性化调整。利用 `${question.title}` 和 `${question.frontendQuestionId}` 等预设变量可以帮助快速搭建起符合个人习惯的工作环境[^4]。 #### 获取题目与编写解答 当一切准备就绪后,可以通过 LeetCode Editor 插件下载所需处理的问题列表,并将其放置于预先设定好的项目结构内。接着就可以着手实现具体的解决方案了——记得充分利用单元测试框架如 JUnit 来验证自己的想法是否正确! ```java // 示例:Two Sum.java 文件内容 public class TwoSum { public int[] twoSum(int[] nums, int target) { Map<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < nums.length; ++i) { if (map.containsKey(target - nums[i])) { return new int[]{map.get(target - nums[i]), i}; } map.put(nums[i], i); } throw new IllegalArgumentException("No two sum solution"); } @Test void testTwoSum() { assertEquals(Arrays.asList(0, 1), Arrays.stream(twoSum(new int[]{2, 7, 11, 15}, 9)).boxed().collect(Collectors.toList())); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿DD

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值