【踩坑篇】代码中使用 Long 作为 Map的Key存在的问题

本周的工作结束,详述一些在项目代码中实际遇到的一些坑。

代码中遇到这样一个场景:

有个业务接口,接口返回的值是一个JSON格式的字符串,通过JSON解析的方式,解析为格式为:

Map<Long, Map<String, Object>> 的数据格式。

然后,根据业务keyId,去上面接口返回的map取值,发现一直为null。

场景复现代码如下所示:

java 复制代码
		Long key = 89765487L;
		String returnStr = "{89765487:{\"uid\":\"2\",\"uname\":\"张三\"}}";
		Map<Long, Map<String, Object>> strMap = JSON.parseObject(returnStr, Map.class);
		System.out.println("strMap = " + strMap);
		Map<String, Object> valueMap = strMap.get(key);
		System.out.println("valueMap = " + valueMap);
java 复制代码
strMap = {10003={"uid":"2","uname":"张三"}}
valueMap = null

解决方案:

发现转化成的Map的key变为String类型的了,此时get Long类型返回为null。

为了由于类型不一致导致的取值问题,现在统一把Map中的key使用string类型。

java 复制代码
        String key = "89765487";
		String returnStr = "{89765487:{\"uid\":\"2\",\"uname\":\"张三\"}}";
		Map<String, Map<String, Object>> strMap = JSON.parseObject(returnStr, Map.class);
		System.out.println("strMap = " + strMap);
		Map<String, Object> valueMap = strMap.get(key);
		System.out.println("valueMap = " + valueMap);
java 复制代码
strMap = {89765487={"uid":"2","uname":"张三"}}
valueMap = {"uid":"2","uname":"张三"}
相关推荐
mikey棒棒棒18 天前
算法练习题25——合并多项式
java·算法·hashmap·哈希·多项式
青山猿1 个月前
HashMap常见面试题
java·开发语言·jvm·hashmap
shyの同学1 个月前
使用LinkedHashMap实现固定大小的LRU缓存
java·缓存·hashmap·lru·linkedhashmap
Dexu72 个月前
【ConcurrentHashMap】JDK1.7版本源码解读与分析
hashmap·jdk1.8·jdk1.7
技术管理修行3 个月前
Java核心技术【十八】Java集合框架精讲:List、Set、Map
map·hashmap·arraylist·hashset·treeset·treemap·linkedlist
银氨溶液3 个月前
Map集合之HashMap细说
java·开发语言·后端·面试题·集合·hashmap·hash
Benaso4 个月前
HashMap在Go与Java的底层实现与区别
java·数据结构·golang·hashmap
软件测试开发架构师4 个月前
java hashmap在项目中的使用
java·hashmap
许野平6 个月前
Rust 语言的 HashMap
开发语言·后端·rust·hashmap
dream_ready7 个月前
为什么 HashMap 默认负载因子是0.75?
java·jvm·数据结构·spring·面试·hashmap·hash