【踩坑篇】代码中使用 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":"张三"}
相关推荐
Aric_Jones1 个月前
HashMap 的底层原理
java·eclipse·maven·hashmap·hash
袁震2 个月前
android HashMap和List该如何选择
android·hashmap·sparsearray
景天科技苑2 个月前
【Rust通用集合类型】Rust向量Vector、String、HashMap原理解析与应用实战
开发语言·后端·rust·vector·hashmap·string·rust通用集合类型
无心水2 个月前
【Java面试笔记:基础】9.对比Hashtable、HashMap、TreeMap有什么不同?
hashmap·java面试·treemap·hashtable·面试笔记
小黑屋的黑小子3 个月前
【数据结构】HashMap源码 —— 简单介绍
数据结构·算法·面试·源码·hashmap
xiaolingting3 个月前
Redis 与 Java HashMap 扩容负载因子差异解析
数据库·redis·hashmap·负载因子·内存碎片·内存敏感·渐进式扩容
小小面试官3 个月前
java江湖系列——集合世家争霸(下)
java·开发语言·list·set·map·集合·hashmap
天天向上杰4 个月前
浅显易懂HashMap的数据结构
java·数据结构·算法·哈希算法·hashmap·hash
hrhcode7 个月前
Java集合 HashMap 原理解读(含源码解析)
java·数据结构·spring boot·hashmap
mikey棒棒棒10 个月前
算法练习题25——合并多项式
java·算法·hashmap·哈希·多项式