我需要一个可以容纳多个值的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>>>()
,但这也不起作用。
答案 0 :(得分:3)
我相信你应该使用
MultiValueMap.multiValueMap(
new TreeMap<String, Collection<Pair<Integer, String>>>());
...不是指ArrayList
,因为大概是图书馆想要自由选择它放在地图中的集合实现。
(也就是说:如果您使用Guava's Multimap
代替,您可以在更简单的行MultimapBuilder.treeKeys().arrayListValues().build()
中获取此内容,并自动推断出泛型。)