如何从 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。