【踩坑篇】代码中使用 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":"张三"}
相关推荐
Mahir089 天前
HashMap 底层原理深度解密:从数据结构到 JDK1.7/1.8 演进全解
java·后端·面试·hashmap
Misnearch13 天前
Java中创建Map的做法
java·hashmap
长谷深风1111 个月前
ConcurrentHashMap线程安全机制解析【个人八股】
哈希算法·cas·线程安全·hashmap·多线程并发·分段锁·桶锁
长谷深风1111 个月前
JDK8 HashMap底层结构解析
线程安全·红黑树·hashmap·哈希冲突·负载因子·数组链表·哈希扰动
深蓝轨迹1 个月前
Java 集合框架超全解 · 底层源码|集合对比|HashMap 扩容原理
java·hashmap·集合框架·arraylist·linkedlist
likerhood1 个月前
ConcurrentHashMap底层数据结构和面试常见问题
java·数据结构·面试·hashmap
阿冰冰呀2 个月前
互联网大厂Java求职面试实录:谢飞机的“水货”之路
java·mybatis·dubbo·springboot·线程池·多线程·hashmap
阿维的博客日记2 个月前
Java8 为什么这里把key的hashcode取出来,然后把它右移16位,然后取异或?
hashmap
苏渡苇3 个月前
ConcurrentHashMap.computeIfAbsent():高并发下安全初始化的终极方案
java·安全·jdk·高并发·hashmap·concurrent
aygh3 个月前
互联网大厂Java面试场景:技术问答实录
mybatis·springboot·多线程·hashmap·java面试·arraylist·技术总结