为什么TreeMap构造函数未定义为具有相同模板值参数类型的比较器类型?

时间:2013-01-10 15:52:53

标签: generics constructor comparator treemap

我的地图的值类型是List<Pair<Integer, String>>

我想在列表中第一对的左侧对其进行排序。但是有一个错误说:

  

构造函数   TreeMap<String,List<Pair<Integer,String>>> (Comparator<List<Pair<Integer,String>>>)    未定义

这是我的代码:

import java.util.TreeMap;
import org.apache.commons.lang3.tuple.Pair;

Map<String, List<Pair<Integer, String>>> data = new HashMap<String, List<Pair<Integer,String>>>();  
            ....
Comparator<List<Pair<Integer, String>>> valueComparator = new Comparator<List<Pair<Integer, String>>>() {
            @Override
            public int compare(List<Pair<Integer, String>> o1,
                    List<Pair<Integer, String>> o2) {
                int rzt = o1.get(0).getLeft() - o2.get(0).getLeft();
                return rzt;
            }  
           };

           TreeMap<String, List<Pair<Integer, String>>> sortedByValues = new TreeMap<String, List<Pair<Integer, String>>>(valueComparator);
           sortedByValues.putAll(data);

1 个答案:

答案 0 :(得分:1)

Comparator应该比较键而不是值。 TreeMap的构造函数具有以下签名:

public TreeMap(Comparator<? super K> comparator)

其中K是密钥的类型参数:Class TreeMap<K,V>