当前位置: 首页 > news >正文

debug的计算表达式

在 IntelliJ IDEA 中调试时查找 Map 的某个 Key,可以通过以下方法高效实现:


方法一:使用「计算表达式」(Evaluate Expression)

  1. 暂停到断点:确保程序执行到 Map 已初始化的位置(如 Map 被赋值或修改后)。
  2. 打开计算窗口
    • 快捷键:Alt + F8(Windows/Linux)或 ⌥ + F8(Mac)。
    • 右键菜单:在代码编辑区域或调试窗口右键 -> Evaluate Expression
  3. 输入表达式
     

    java复制代码

    // 检查 Key 是否存在 map.containsKey("targetKey") // 直接获取 Key 的值(若不存在返回 null) map.get("targetKey") // 遍历 KeySet 查找(适用于复杂匹配) map.keySet().stream().filter(k -> k.equals("targetKey")).findFirst().orElse(null)
  4. 执行验证:点击 Evaluate,结果会显示在下方面板。

方法二:条件断点过滤

若需在访问特定 Key 时暂停程序:

  1. 在 Map 操作代码行设断点
    例如在 map.get(key) 或 map.put(key, value) 处。
  2. 设置条件
    • 右键断点 -> Condition
    • 输入条件表达式(根据场景选择):
       

      java复制代码

      // 当操作的 Key 等于目标值时触发 key.equals("targetKey") // 若 Key 是基本类型(如 Integer) key == 100
  3. 调试运行:程序仅在操作目标 Key 时暂停。

方法三:变量窗口过滤

  1. 展开 Map 变量
    在 Variables 面板中找到 Map 变量,点击展开查看所有 Entry。
  2. 使用搜索框
    在展开的 Map 条目上方输入 Key 名称,IDEA 会实时过滤显示匹配项。

    IDEA变量窗口过滤


方法四:自定义数据渲染(针对大型 Map)

若 Map 过大,可简化显示格式:

  1. 右键 Map 变量 -> Customize Data Views
  2. 勾选 Enable alternative view for Collections classes
  3. 输入渲染表达式(如仅显示 Key):
     

    java复制代码

    entrySet().stream().map(e -> e.getKey()).collect(java.util.stream.Collectors.toList())
  4. 确认后 Map 将以简化形式显示 Key 列表,便于快速查找。

常见问题与技巧

  1. 空指针防护
    若 Key 或 Map 可能为 null,添加空检查:
     

    java复制代码

    map != null && map.containsKey("targetKey")
  2. 非字符串 Key
    根据 Key 类型调整比较方式(如数值型无需引号):
     

    java复制代码

    map.containsKey(100) // Integer Key
  3. Lambda 表达式支持
    在 Evaluate 窗口可使用 Lambda 进行复杂查询:
     

    java复制代码

    map.entrySet().stream().anyMatch(e -> e.getKey().startsWith("test"))

操作示例

假设有一个 Map<String, User> userMap,需查找 Key 为 "user_123" 的条目:

  1. 在 userMap.get(key) 处设条件断点,条件设为 key.equals("user_123")
  2. 当程序执行到获取该 Key 时自动暂停,此时可在 Variables 面板直接查看 Value。
  3. 或直接在暂停时按 Alt + F8,输入 userMap.get("user_123") 查看结果。

通过上述方法,无需手动遍历 Map 即可快速定位目标 Key,大幅提升调试效率。

http://www.lqws.cn/news/572347.html

相关文章:

  • 《平行宇宙思维如何让前端错误处理无懈可击》
  • 2025年渗透测试面试题总结-2025年HW(护网面试) 20(题目+回答)
  • 各种常用的串口助手工具分享
  • 第10篇 图像语义分割和目标检测介绍
  • 循环神经网络的概念和案例
  • 带读YOLOv13,HyperACE | FullPAD到底是什么
  • 个人计算机系统安全、网络安全、数字加密与认证
  • 数据库中的 DDL(Data Definition Language,数据定义语言) 用于定义或修改数据库结构(如库、表、索引、约束等)。
  • 机器学习-02(深度学习的基本概念)
  • 智能新纪元:大语言模型如何重塑电商“人货场”经典范式
  • 【QT】信号和槽(1) 使用 || 定义
  • 深入学习 GORM:记录插入与数据检索
  • MySQL技巧
  • 【ad-hoc】# P12414 「YLLOI-R1-T3」一路向北|普及+
  • Requests源码分析:面试考察角度梳理
  • MySQL 架构
  • 理解 Confluent Schema Registry:Kafka 生态中的结构化数据守护者
  • 第10.4篇 使用预训练的目标检测网络
  • 学习使用Visual Studio分析.net内存转储文件的基本用法
  • C# 委托(调用带引用参数的委托)
  • 计算机组成原理与体系结构-实验四 微程序控制器 (Proteus 8.15)
  • 【硬核数学】3. AI如何应对不确定性?概率论为模型注入“灵魂”《从零构建机器学习、深度学习到LLM的数学认知》
  • 【HuggingFace】模型下载至本地访问
  • SpringMVC实战:从配置到JSON处理全解析
  • 开源免费计划工具:帮你高效规划每一天
  • UE5 Grid3D 学习笔记
  • 什么是IPFS(InterPlanetary File System,星际文件系统)
  • c# 在sql server 数据库中批插入数据
  • C++ 格式化输入输出
  • 「Java案例」输出24个希腊字母