Как получить второй ключ и значение из Nested Multimap - PullRequest
1 голос
/ 09 апреля 2019

У меня сложный 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);

Но это не работает. Я получаю ошибки несовместимых типов. Не уверен, что я делаю не так.

1 Ответ

1 голос
/ 09 апреля 2019

Я думаю, что вы хотите использовать не 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.

...