通过值索引获取Guava Multimap的密钥

时间:2017-07-31 09:14:05

标签: java arrays collections guava multimap

假设这是我在Multimap集合中的示例数据:

x -> [1,2]
y -> [1,3]
z -> [4]

然后我创建了一个值列表,可能是这样的:(第一列是值的索引,第二列是值)

0 -> 1
1 -> 2
2 -> 1
3 -> 3
4 -> 4

我的问题是如何通过了解该值的索引来获取值的配对键。例如索引的关键" 2" ,关键" y"必须回来。

1 个答案:

答案 0 :(得分:1)

如果您想这样做一次,您可以对Multimap#entries()进行简单循环并自行维护,但是:

  1. 各种Mutlimap实现的迭代顺序可能不同
  2. 如果主要用例是索引访问键/值,那么你根本不应该使用Multimap,而是维护一个列表(可能是List<Entry<String, Integer>>)。
  3. 如果你真的必须拥有多图并且它是不可变的,你可以使用.entries().asList()视图来实现我上面描述的内容:

    //given
    ImmutableListMultimap<String, Integer> multimap =
            ImmutableListMultimap.<String, Integer>builder()
                    .putAll("x", 1, 2)
                    .putAll("y", 1, 3)
                    .putAll("z", 4)
                    .build();
    ImmutableList<Map.Entry<String, Integer>> entriesWithPosition =
            multimap.entries().asList();
    //when
    Map.Entry<String, Integer> foundEntry = entriesWithPosition.get(2);
    //then
    assertThat(foundEntry.getKey()).isEqualTo("y");