【踩坑篇】代码中使用 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":"张三"}
相关推荐
Jiong-9529 天前
Java求职面试:谢飞机的奇妙旅程
java·jvm·线程池·多线程·hashmap·juc·arraylist
Peter(阿斯拉)10 天前
[Java性能优化]_[容器创建枚举去重的最优方法]
java·集合·hashmap·hashset·treemap
lkbhua莱克瓦2411 天前
集合进阶6——TreeMap底层原理
java·开发语言·笔记·学习方法·hashmap
7澄113 天前
Java 实战:投票统计系统(HashMap 应用)
java·开发语言·intellij-idea·交互·控制台·hashmap
飞鱼&17 天前
HashMap相关问题详解
java·hashmap
不见长安在1 个月前
HashMap的源码学习
java·hashmap
小霞在敲代码2 个月前
HashMap - 底层原理
java·hashmap
工一木子3 个月前
HashMap源码深度解析:从“图书馆“到“智能仓库“的进化史
java·源码·hashmap
一叶难遮天3 个月前
Android面试指南(八)
java·设计模式·数组·hashmap·string·android面试·匿名内部类
最初的↘那颗心3 个月前
Java HashMap深度解析:原理、实现与最佳实践
java·开发语言·面试·hashmap·八股文