[转]Map.getOrDefault被坑小记与optional
Map 小记 optional
2023-09-11 14:16:15 时间
原文地址:https://www.lmlphp.com/user/19461/article/item/482751/
错误使用样例
map.getOrDefault("account","").toString();
在运行几小时后,发现报错空指针;查看源码如下:
default V getOrDefault(Object key, V defaultValue) {
V v;
return (((v = get(key)) != null) || containsKey(key))
? v
: defaultValue;
}
- 竟然是||运算,如果containsKey 或者getkey() != null 则获取;
- 如果包含key的value为null,则会获取null值导致空指针;
建议使用java8的Optional来判空:
Optional.ofNullable(map.get("account")).orElse("");
- 上述为判断map中key是否为null,如果是则返回orElse中的值;
对于Optional的应用常用的有以下几种:
- 区别于of() 不可以为null,而ofNullable()可以为null;
- 判断值是否存在,可实现内部consumer实现若不存在的函数回调;
- 判断值是否为null,若不为null则取当前值。
- orElse():判断为null则取orElse()中的值
- orElseGet():判断为null则执行自定义的回调函数;
- orElseThrow():判断为null则抛处自定义异常;
相关文章
- map+pair Bayan 2015 Contest Warm Up D题
- java基础—Map集合的常见方法操作(java集合八)
- Google Earth Engine ——数据全解析专辑(Global Map of Oil Palm Plantations)全球油棕种植园数据集!
- 80 C++ - map/multimap容器
- 《GO并发编程实战》—— Concurrent Map
- Array.from()的使用方法(数组去重,伪数组转为数组,数组浅克隆),Set和Map数据结构
- c++中map用法
- Java的Map中的map.keySet()方法
- Java当中的集合框架Map
- java将对象列表中的某个属性转换成List或Map
- MapReduce案例—分别通过Reduce端和Map端实现JOIN操作
- Map容器线程安全问题
- List、Map、Set
- DWR3.0 dwr 返回值(数组,集合,Map)
- Java8List转Map的value冲突重复将value合并成List解决
- java lambda groupby 的map顺序问题
- Java 创建 List 和 Map 同时赋初值的 5 种方式