我正在读一个json对象并将它们设置为HashMap中的键值对,到目前为止一切都很好。现在我遇到一个问题,我有一个特殊的密钥,它在json对象中重复但具有不同的值。
例如:
“id”:31231
“id”:33445
我现在需要这两个值。任何人都可以向我推荐最好的数据结构来存储这些数据。
答案 0 :(得分:3)
您可以使用MultiMap或制作自己的Map<String,List<Value>
。
答案 1 :(得分:0)
是的,将Map
值设为List
并将两个值都添加到其中。它被称为多地图。
答案 2 :(得分: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);
{key = [12334,31231,12312,12312]}
答案 3 :(得分:0)
如果您不希望重复值针对同一个json对象,则可以定义Map<String,Set<Integer>>
。否则,您可以像这样定义集合:Map<String,List<Integer>>
。其中json对象是键,并且值是针对json对象设置的/整数值列表。
这就是你的代码逻辑应该是
在哈希映射中插入条目之前,请检查密钥是否已存在
希望你能够编写代码。
答案 4 :(得分:0)
Guava library还包含Multimap接口以及各种实现。
答案 5 :(得分:0)
如果为密钥ID保留JSON数组而不是单个值,那会更好。这是您的JSON在实施上述建议后的样子:
{"ids": [{"id": "a"}, {"id": "b"}], "x": "c", "y": "d", ... }
读取时只需获取ids键的值(JSON数组)并迭代它并从JSON数组中的JSON对象获取id。
我认为它应该可以解决你的问题。