如何从 Nested Multimap 中获取第二个键和值
How to get second key and value from Nested Multimap
我有一个复杂的 JsonObject,我想使用嵌套的 Guava 多重映射来存储值,因为键可以重复。问题是如果我有外部多图的密钥,我如何访问内部多图。
这是我目前所做的。
Multimap<String, Multimap<String, List<ZoneOrders>>> dictionaryfinal;
Multimap<String, List<ZoneOrders>> dictionaryOrders;
dictionaryfinal = LinkedHashMultimap.create();
dictionaryOrders = LinkedHashMultimap.create();
然后我通过 json 响应循环存储我的值,如下所示:
dictionaryOrders.put(zoneland, zoneorder);
dictionaryfinal.put(zonetype, dictionaryOrders);
我可以使用
轻松获取外部多图的键集
dictionaryfinal.keySet().
从上面获得其中一个键后,我想访问链接到所选键的内部多图。
这是我尝试过的,所以我可以访问内部多图:
Multimap<String, List<ZoneOrders>> ordinaryold = LinkedHashMultimap.create();
ordinaryold = dictionaryfinal.get(item);
但这不起作用。我收到错误不兼容的类型。不确定我做错了什么。
我认为您想要使用的不是 Multimap
,而是普通的 Map
。
您正在使用的Multimap<K,V>
(大概是Guava
,因为您没有说),本质上是Map<K, Set<V>>
。
如果您改为使用 Map
,您的嵌套应该可以工作:
Map<String, Map<String, List<ZoneOrders>>> dictionaryfinal = new LinkedHashMap<>();
Map<String, List<ZoneOrders>> dictionaryOrders1 = new LinkedHashMap<>();
dictionaryOrders1.put(zoneland, zoneorder);
dictionaryfinal.put(zonetype1, dictionaryOrders1);
Map<String, List<ZoneOrders>> dictionaryOrders2 = new LinkedHashMap<>();
dictionaryOrders2.put(zoneland2, zoneorder2);
dictionaryfinal.put(zonetype2, dictionaryOrders2);
然后,如果您获得 zonetype1
的项目,您可以通过以下方式简单地获得其嵌套的 Map
:
Map<String, List<ZoneOrders>> values1 = dictionaryfinal.get(zonetype1);
values1
将只对应zonetype1
的内部multimap。
我有一个复杂的 JsonObject,我想使用嵌套的 Guava 多重映射来存储值,因为键可以重复。问题是如果我有外部多图的密钥,我如何访问内部多图。
这是我目前所做的。
Multimap<String, Multimap<String, List<ZoneOrders>>> dictionaryfinal;
Multimap<String, List<ZoneOrders>> dictionaryOrders;
dictionaryfinal = LinkedHashMultimap.create();
dictionaryOrders = LinkedHashMultimap.create();
然后我通过 json 响应循环存储我的值,如下所示:
dictionaryOrders.put(zoneland, zoneorder);
dictionaryfinal.put(zonetype, dictionaryOrders);
我可以使用
轻松获取外部多图的键集dictionaryfinal.keySet().
从上面获得其中一个键后,我想访问链接到所选键的内部多图。
这是我尝试过的,所以我可以访问内部多图:
Multimap<String, List<ZoneOrders>> ordinaryold = LinkedHashMultimap.create();
ordinaryold = dictionaryfinal.get(item);
但这不起作用。我收到错误不兼容的类型。不确定我做错了什么。
我认为您想要使用的不是 Multimap
,而是普通的 Map
。
您正在使用的Multimap<K,V>
(大概是Guava
,因为您没有说),本质上是Map<K, Set<V>>
。
如果您改为使用 Map
,您的嵌套应该可以工作:
Map<String, Map<String, List<ZoneOrders>>> dictionaryfinal = new LinkedHashMap<>();
Map<String, List<ZoneOrders>> dictionaryOrders1 = new LinkedHashMap<>();
dictionaryOrders1.put(zoneland, zoneorder);
dictionaryfinal.put(zonetype1, dictionaryOrders1);
Map<String, List<ZoneOrders>> dictionaryOrders2 = new LinkedHashMap<>();
dictionaryOrders2.put(zoneland2, zoneorder2);
dictionaryfinal.put(zonetype2, dictionaryOrders2);
然后,如果您获得 zonetype1
的项目,您可以通过以下方式简单地获得其嵌套的 Map
:
Map<String, List<ZoneOrders>> values1 = dictionaryfinal.get(zonetype1);
values1
将只对应zonetype1
的内部multimap。