2

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

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

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

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

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

这似乎是一种“骇人听闻”的做事方式,那么我有什么方法可以更轻松地获取这些值吗?

4

3 回答 3

7

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

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

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

如果您使用的是 aListMultimap那么它的行为非常类似于 List 的映射,因此您可以直接调用get(n).

于 2012-08-07T20:13:49.460 回答
3
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
于 2012-08-07T19:17:23.503 回答
0

要获取同一键的所有值,最简单的方法是:

    Iterator iterator = multimap.get(key).iterator();
    System.out.println("first element: " + iterator.next());
    System.out.println("second element: " + iterator.next());
    System.out.println("third element: " + iterator.next());

等等

如果您想在不知道有多少元素的情况下获取所有元素,则另一种选择

  Iterator iterator = multimap.get(key).iterator();
   int index=1;
   while (iterator.hasNext()) {
    System.out.println(index +" element: " + iterator.next()); 
     index++;
        }
于 2021-10-27T07:57:45.587 回答