是否有一个允许一键到多值关系的java集合?

jay*_*net 0 java

我需要一种集合类型,允许多个值与多个键相关联.理想情况下,我会像Map一样使用它,但map用于给定键以产生单个值.

以下是我想如何使用它的示例:

@Test
public void multipleItems() {
    Index<String, String> index = new Index<String, String>();
    index.add("key1", "value1");
    index.add("key2", "value2");
    index.add("key1", "value3");
    index.add("key2", "value4");
    index.add("key1", "value5");

    List<String> values = index.get("key2");

    assertEquals(2, values.size());
    assertEquals("value2", values.get(0));
    assertEquals("value4", values.get(1));
}
Run Code Online (Sandbox Code Playgroud)

我不知道JVM中有任何实现.我自己可以实现这个,但我希望找到一个现有的实现.

建议?

基于下面的建议,我最终使用了番石榴(并包装它,因为我不想将其暴露给我的应用程序的其余部分,以防我找到更好的解决方案.

我使用这些设置来包含我的gradle脚本: 'com.google.guava:guava-collections:r03'

我的"包装器"类看起来像这样:

public class Indexes<K, V> {

    private HashMultimap<K, V> keyToValuesMap = HashMultimap.create();

    public void put(K key, V value) {
        this.keyToValuesMap.put(key, value);
    }

    public Set<V> get(K key) {
        return this.keyToValuesMap.get(key);
    }

}
Run Code Online (Sandbox Code Playgroud)

Sig*_*ign 10

Guava是谷歌的Java库,有几种类型的Multimaps,包括ListMultimapSetMultimap,有各种各样的实现.还有一篇wiki文章.