0

我正在读取一个 json 对象并将它们作为键值对设置到 HashMap 中,到目前为止一切都很好。现在我遇到一个问题,我有一个特定的键,它在 json 对象中重复但具有不同的值。

例如:

“身份证”:31231

“身份证”:33445

我现在需要这两个值。谁能推荐我最好的数据结构来存储这些数据。

4

6 回答 6

3

您可以使用MultiMap或制作自己的Map<String,List<Value>.

于 2013-06-06T09:14:23.447 回答
0

是的,将值设为MapaList并将两个值都添加到其中。它被称为多地图。

于 2013-06-06T09:14:25.123 回答
0

使用 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]}

于 2013-06-06T09:18:17.670 回答
0

Map<String,Set<Integer>>如果您不希望针对同一个 json 对象的重复值,您可以定义. 否则,您可以像这样定义集合:Map<String,List<Integer>>. 其中 json 对象是键,值是针对 json 对象的整数值的设置/列表。这就是您的代码逻辑应该如何

在 hashmap 中插入条目之前,检查 key 是否已经存在

  • 一个。如果 key 不存在,则创建一个新的 set/list,将 value 添加到 se/list 并将其插入 key
  • 湾。如果键存在,则根据键获取集合/列表并在集合中添加一个元素

希望你应该能够编写代码。

于 2013-06-06T09:18:44.343 回答
0

Guava 库还包含Multimap接口以及各种实现。

于 2013-06-06T09:35:30.957 回答
0

如果您保留一个 JSON 数组而不是键 id 的单个值,那会更好。这是您的 JSON 在实施上述建议后的样子:

{"ids": [{"id": "a"}, {"id": "b"}], "x": "c", "y": "d", ...  }

在读取时,只需获取 ids 键的值(JSON 数组)并遍历它并从 JSON 数组中的 JSON 对象获取 id。

我认为它应该可以很好地解决您的问题。

于 2013-06-06T09:40:29.437 回答