如何从Apache Commons Collections创建新的MultiValueMap?

时间:2014-02-03 17:57:10

标签: java generics collections apache-commons

我需要一个可以容纳多个值的TreeMap,所以我选择了来自Commons Collections的MultiValueMap 4.0

使用HashMap很容易

 private MultiValueMap<String, Pair<Integer, String>> foo = 
    new MultiValueMap<String, Pair<Integer, String>>();

但是当我想使用像TreeMap这样的其他地图实现时,构造函数变得相当尴尬..

//they hide MultiValueMap(Map map, Factory factory), 
//so I'll have to use static multiValueMap(...) instead

private MultiValueMap<String, Pair<Integer, String>> directoryMap=
    MultiValueMap.multiValueMap(new TreeMap<String, Pair<Integer, String>>());

现在,Eclipse抛出了这个:

The method multiValueMap(Map<K,? super Collection<V>>) in the type MultiValueMap is not 
applicable for the arguments (TreeMap<String,Pair<Integer,String>>)

所以,我的问题是,Map<K,? super Collection<V>>是什么意思?

我尝试new TreeMap<String, ArrayList<Pair<Integer, String>>>(),但这也不起作用。

1 个答案:

答案 0 :(得分:3)

我相信你应该使用

MultiValueMap.multiValueMap(
    new TreeMap<String, Collection<Pair<Integer, String>>>());

...不是指ArrayList,因为大概是图书馆想要自由选择它放在地图中的集合实现。

(也就是说:如果您使用Guava's Multimap代替,您可以在更简单的行MultimapBuilder.treeKeys().arrayListValues().build()中获取此内容,并自动推断出泛型。)