我需要一种允许多个值与多个键相关联的集合类型。理想情况下,我会像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中有任何实现。我可以自己实现,但我希望找到一个现有的实现。
建议?
解
根据以下建议,我最终使用了番石榴(并将其包装起来,因为我不想将其暴露给我的应用程序的其余部分,以防我找到更好的解决方案。
我使用these settings通过我的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);
}
}
答案 0 :(得分:10)
Guava,来自Google的java库,有几种类型的Multimap
,包括ListMultimap
和SetMultimap
,有各种各样的实现。还有wiki article。
答案 1 :(得分:3)
要与其他答案一起使用,如果您也无法使用第三方库,则可以通过Map<String, List<String>>
或Map<String, Set<String>>
自行推送。
答案 2 :(得分:0)
您可以在java中使用multimap。 有关详细信息,请参阅此处。
http://commons.apache.org/collections/api-3.1/org/apache/commons/collections/MultiMap.html