getordefault是map中安全取值的高频方法,用于键不存在时返回默认值,避免空指针、简化判空逻辑,适用于词频统计、配置读取、嵌套结构访问及缓存未命中场景。

当从 Map 中获取某个键对应的值,而该键可能不存在时,getOrDefault 能避免空指针、简化判空逻辑,是日常开发中高频使用的安全取值方式。
统计词频时自动初始化计数器
向 Map 中累计单词出现次数时,无需提前判断键是否存在。每次调用 getOrDefault(word, 0) + 1 即可安全累加。
- 传统写法需先
containsKey或捕获get返回的null - 使用
getOrDefault后一行完成读取+默认值+计算,代码更紧凑 - 尤其适合流式处理(如
stream().collect(Collectors.toMap(...))配合 mergeFunction)
配置项读取提供合理兜底值
从配置 Map(如 application.properties 加载后的映射)中读取参数时,很多字段有业务默认值。
- 例如:
configMap.getOrDefault("timeout.ms", 5000),比先判空再三元运算更直观 - 避免因配置缺失导致程序异常,同时明确体现“这个值允许不填,缺省即用 5000”
- 相比
Properties.getProperty(key, defaultValue),Map 版本更通用,不限于字符串类型
构建嵌套结构时避免空引用异常
比如用 Map<string list>></string> 存储分组数据,向某 key 对应的 list 添加元素前,需确保 list 已存在。
- 可写成:
map.computeIfAbsent(key, k -> new ArrayList()).add(item),但若只想读取并安全操作,getOrDefault(key, Collections.emptyList())更轻量 - 适用于只读场景:如遍历所有分组项,某组为空也不影响后续逻辑
- 注意返回的是不可变空列表,若需修改,仍得用
computeIfAbsent
缓存访问中定义未命中时的占位行为
简易本地缓存(如 ConcurrentHashMap)中,对未命中的 key 可直接返回预设默认对象,而非 null。
- 例如:
cacheMap.getOrDefault(requestId, new CacheEntry(STATUS_PENDING)) - 避免调用方反复判空,也减少重复构造默认对象(可复用单例或静态常量)
- 注意:若默认值需动态计算(如查库),应改用
computeIfAbsent,防止无谓执行
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











