在Multimap中检索特定值

时间:2012-08-07 19:12:49

标签: java guava

我正在使用每个键有两个值的Multimap。下面是我用来分别获取每个值的代码:

第一位代码获取第一个对象值:

for(Object object : map.get(object))
{
    return object
}

然后,我正在使用另一种方法来检索另一个值。此方法将第一个对象作为参数:

for(Object object : team.get(object))
{
    if(object != initialObject)
    {
        return object;
    }
}

这似乎是一种“hackish”的做事方式,所以有什么方法可以让我更轻松地获得价值?

2 个答案:

答案 0 :(得分:7)

如果您正在使用Guava,Iterables#get可能就是您想要的 - 它会从任何可迭代中返回第N个项目,例如:

Multimap<String, String> myMultimap = ArrayListMultimap.create();

// and to return value from position:
return Iterables.get(myMultimap.get(key), position);

如果您使用的是ListMultimap,那么它的行为与列表的地图非常相似,因此您可以直接拨打get(n)

答案 1 :(得分:2)

Collection<Object> values = map.get(key);
checkState(values.size() == 2, String.format("Found %d values for key %s", values.size(), key));

return values.iterator().next(); // to get the first

Iterator<Object> it = values.iterator();
it.next(); // move the pointer to the second object
return it.next(); // get the second object