【问题标题】:Get key of Guava Multimap by index of value通过值索引获取 Guava Multimap 的键
【发布时间】:2018-01-06 18:50:13
【问题描述】:

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

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

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

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

我的问题是如何通过知道该值的索引来获取该值的配对键。例如索引“2”的键,键“y”必须返回。

【问题讨论】:

    标签: java arrays collections guava multimap


    【解决方案1】:

    如果你想这样做一次,你可以对Multimap#entries()做简单的循环并自己维护计数器,但是:

    1. 各种Mutlimap 实现的迭代顺序可能不同
    2. 如果主要用例是按索引访问键/值,则根本不应该在此处使用Multimap,而应维护一个列表(可能是List<Entry<String, Integer>>)。

    如果你真的需要多图并且它是不可变的,你可以使用.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");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-08
      • 1970-01-01
      • 2011-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-27
      • 2012-06-09
      相关资源
      最近更新 更多