【踩坑篇】代码中使用 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":"张三"}
相关推荐
最初的↘那颗心2 天前
Java HashMap深度解析:原理、实现与最佳实践
java·开发语言·面试·hashmap·八股文
暮乘白帝过重山4 天前
解剖HashMap的put <三> JDK1.8
java·数据结构·hashmap·暮乘白帝过重山
雪碧聊技术1 个月前
HashMap和Hashtable的区别
java·hashmap·hashtable
络71 个月前
HashMap的put、get方法详解(附源码)
算法·哈希算法·hashmap
Aric_Jones3 个月前
HashMap 的底层原理
java·eclipse·maven·hashmap·hash
袁震3 个月前
android HashMap和List该如何选择
android·hashmap·sparsearray
景天科技苑4 个月前
【Rust通用集合类型】Rust向量Vector、String、HashMap原理解析与应用实战
开发语言·后端·rust·vector·hashmap·string·rust通用集合类型
无心水4 个月前
【Java面试笔记:基础】9.对比Hashtable、HashMap、TreeMap有什么不同?
hashmap·java面试·treemap·hashtable·面试笔记
小黑屋的黑小子4 个月前
【数据结构】HashMap源码 —— 简单介绍
数据结构·算法·面试·源码·hashmap
xiaolingting4 个月前
Redis 与 Java HashMap 扩容负载因子差异解析
数据库·redis·hashmap·负载因子·内存碎片·内存敏感·渐进式扩容