我正在读取一个 json 对象并将它们作为键值对设置到 HashMap 中,到目前为止一切都很好。现在我遇到一个问题,我有一个特定的键,它在 json 对象中重复但具有不同的值。
例如:
“身份证”:31231
“身份证”:33445
我现在需要这两个值。谁能推荐我最好的数据结构来存储这些数据。
我正在读取一个 json 对象并将它们作为键值对设置到 HashMap 中,到目前为止一切都很好。现在我遇到一个问题,我有一个特定的键,它在 json 对象中重复但具有不同的值。
例如:
“身份证”:31231
“身份证”:33445
我现在需要这两个值。谁能推荐我最好的数据结构来存储这些数据。
您可以使用MultiMap或制作自己的Map<String,List<Value>
.
是的,将值设为Map
aList
并将两个值都添加到其中。它被称为多地图。
使用 multiMap Commons Collections 3.2.1 API中提供的 multiMap
MultiMap multiMap = new MultiValueMap();
multiMap.put("key", 12334);
multiMap.put("key", 31231);
multiMap.put("key", 12312);
multiMap.put("key", 12312);
System.out.println(multiMap);
{键=[12334, 31231, 12312, 12312]}
Map<String,Set<Integer>>
如果您不希望针对同一个 json 对象的重复值,您可以定义. 否则,您可以像这样定义集合:Map<String,List<Integer>>
. 其中 json 对象是键,值是针对 json 对象的整数值的设置/列表。这就是您的代码逻辑应该如何
在 hashmap 中插入条目之前,检查 key 是否已经存在
希望你应该能够编写代码。
如果您保留一个 JSON 数组而不是键 id 的单个值,那会更好。这是您的 JSON 在实施上述建议后的样子:
{"ids": [{"id": "a"}, {"id": "b"}], "x": "c", "y": "d", ... }
在读取时,只需获取 ids 键的值(JSON 数组)并遍历它并从 JSON 数组中的 JSON 对象获取 id。
我认为它应该可以很好地解决您的问题。