0

我需要一种允许将多个值与多个键关联的集合类型。理想情况下,我会像使用 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));
}

我不知道 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);
    }

}
4

3 回答 3

10

Guava是 Google 的 java 库,有多种类型的Multimaps,包括ListMultimapSetMultimap,有多种实现。还有一篇维基文章

于 2012-04-23T15:00:03.007 回答
3

要与其他答案一起使用,您可以通过自己的方式滚动,Map<String, List<String>>或者Map<String, Set<String>>如果您也不能使用 3rd 方库。

于 2012-04-23T15:23:28.657 回答
0

你可以在java中使用multimap。有关更多信息,请参阅此。

http://commons.apache.org/collections/api-3.1/org/apache/commons/collections/MultiMap.html

于 2012-04-23T15:12:03.447 回答