【发布时间】:2015-12-30 10:15:56
【问题描述】:
我有一些键指向多重映射中的许多值。如何根据多图中存在的值检索密钥。这是我的代码。
package com.manoj;
import java.util.Set;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;
public class GuavaMap
{
public static void main(String[] args)
{
Multimap regions = ArrayListMultimap.create();
regions.put("asia", "afganistan");
regions.put("asia", "bangladesh");
regions.put("asia", "inida");
regions.put("asia", "japan");
regions.put("asia", "burma");
regions.put("europe", "andorra");
regions.put("europe", "austria");
regions.put("europe", "belgium");
regions.put("europe", "cyprus");
regions.put("oceania","australia");
regions.put("oceania", "fiji");
regions.put("oceania", "nauru");
Set<String> keys = regions.keySet();
System.out.println("key\t\t\t"+"values\t\t\t");
System.out.println();
String comp = null;
for(String key : keys)
{
System.out.print(key);
System.out.println(regions.get(key));
}
}
}
我需要基于国家/地区的地区名称。
例子:如果我给“澳大利亚”输出应该是“大洋洲”
【问题讨论】:
-
由于
Multimap中的值不需要是唯一的,您需要决定如何处理相同值的多个键。撇开这一点不谈,您似乎需要迭代所有.entries(),将值与“australia”进行比较并在匹配时返回键。 -
如果您自己已经找到答案,我建议您关闭问题
-
您最好创建一张国家到地区的地图,然后通过反转地图创建多地图:
Multimap<String, String> regionsToCountriesMultimap = Multimaps.invertFrom(Multimaps.forMap(countriesToRegionsMap), ArrayListMultimap.create());。这有几个好处:1. 你有一张地图,可以用来在恒定时间内获取一个国家的区域,2. 你有一个 Multimap,你可以用来在恒定时间内获取一个地区的所有国家,以及 3. 使用地图可确保您不能将一个国家/地区放在多个区域中(这可以通过您当前的解决方案实现)。
标签: java collections guava