我有此番石榴多地图代码:
String key = "first-key";
Multimap<String, String> map = ArrayListMultimap.create();
map.put(key, "firstValue");
map.put(key, "secondValue");
map.put(key, "thirdValue");
map.putAll("sec-key", Sets.newHashSet("am", "are", "is"));
for (String name : map.keySet()) {
System.out.println("key: " + name);
}
我想在此结构中查询值。
例如:如何发送值are
并获得结果is
?
are
和is
都是值映射到键 sec-key
。没有直接使用多图通过不同值查找值的简单方法。 mutlimap用于将keys映射到values。不是值到值。
您当然可以做这样的事情,但这效率很低-此代码需要我们遍历整个地图:
for (Entry<String, String> entry : map.entries()){
if (entry.getValue().equals("are")) {
System.out.println(map.get(entry.getKey())); //will print the values mapped to the same key as `are`.
break;
}
}
一种更好的解决方案是使用第二个映射,其中are
是键,而is
将是值(或者在Mutlimap
的情况下是值之一)。如果您确保两个mutlimap保持同步,则可以在两个方向上快速查找。