Java 没有为带有比较器的TreeMap找到合适的构造函数<;地图入口

Java 没有为带有比较器的TreeMap找到合适的构造函数<;地图入口,java,generics,comparator,Java,Generics,Comparator,我想创建一个带有匿名类比较器的TreeMap,用于比较这些值。但是,我犯了一个错误。我哪里做错了 private List<Map<Integer,Integer>> edges; /* * init edges database */ private void initEdges() { edges = new ArrayList<Map<Integer,Integer>>(); for(int i = 0; i < t

我想创建一个带有匿名类比较器的
TreeMap
,用于比较这些值。但是,我犯了一个错误。我哪里做错了

private List<Map<Integer,Integer>> edges;
/*
*   init edges database
*/
private void initEdges() {
    edges = new ArrayList<Map<Integer,Integer>>();
    for(int i = 0; i < this.amountOfVertices; i++) {
        edges.add(
                new TreeMap<Integer, Integer>(
                        new Comparator<Map.Entry<Integer, Integer>>() {
                            @Override
                            public int compare(Map.Entry<Integer, Integer> i1, Map.Entry<Integer, Integer> i2)
                            {
                                int res = i1.getValue().compareTo(i2.getValue());
                                return res != 0 ? res : 1;
                            }
                        }
                )
        );
    }
}
私有列表边缘;
/*
*初始化边缘数据库
*/
私有void initEdges(){
边=新的ArrayList();
for(int i=0;i
精确的错误为

Error:(21, 21) java: no suitable constructor found for TreeMap(<anonymous java.util.Comparator<java.util.Map.Entry<java.lang.Integer,java.lang.Integer>>>)
    constructor java.util.TreeMap.TreeMap(java.util.Comparator<? super java.lang.Integer>) is not applicable
      (argument mismatch; <anonymous java.util.Comparator<java.util.Map.Entry<java.lang.Integer,java.lang.Integer>>> cannot be converted to java.util.Comparator<? super java.lang.Integer>)
    constructor java.util.TreeMap.TreeMap(java.util.Map<? extends java.lang.Integer,? extends java.lang.Integer>) is not applicable
      (argument mismatch; <anonymous java.util.Comparator<java.util.Map.Entry<java.lang.Integer,java.lang.Integer>>> cannot be converted to java.util.Map<? extends java.lang.Integer,? extends java.lang.Integer>)
    constructor java.util.TreeMap.TreeMap(java.util.SortedMap<java.lang.Integer,? extends java.lang.Integer>) is not applicable
      (argument mismatch; <anonymous java.util.Comparator<java.util.Map.Entry<java.lang.Integer,java.lang.Integer>>> cannot be converted to java.util.SortedMap<java.lang.Integer,? extends java.lang.Integer>)
错误:(21,21)java:找不到适合TreeMap()的构造函数

构造函数java.util.TreeMap.TreeMap(java.util.Comparator我认为你给
TreeMap的比较器应该知道如何比较
Integer
,而不是
Map.Entry
对象。

我认为你给
TreeMap
的比较器应该知道如何比较
Integer
,而不是
Map.Entry
对象。

TreeMap
按它的键排序(不是它的条目)。你需要

edges.add(new TreeMap<Integer, Integer>(new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        return o1.compareTo(o2);
    }
}));
edges.add(新树映射(新比较器)(){
@凌驾
公共整数比较(整数o1,整数o2){
返回o1。与(o2)相比;
}
}));

A
TreeMap
是按它的键(而不是它的条目)排序的

edges.add(new TreeMap<Integer, Integer>(new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        return o1.compareTo(o2);
    }
}));
edges.add(新树映射(新比较器)(){
@凌驾
公共整数比较(整数o1,整数o2){
返回o1。与(o2)相比;
}
}));

不要尝试根据值对
TreeMap
进行排序。在这个链接中,您发送了一个解决方案如何进行排序,但我想使用匿名类来完成此操作:/您到底想做什么?通常当人们说他们想要一个按值排序的TreeMap时,这是XY问题的一个示例。您想要对
映射
进行排序使用匿名类对值进行排序?正确吗?@PianistaMichal使用树映射和自定义比较器按值对映射进行排序非常容易,只要它不必是匿名类。匿名类不能有构造函数,所以很难这样做。不要尝试根据值对
树映射进行排序。在这种情况下你发送的链接有一个解决方案,但我想用匿名类来实现这一点:/你到底想做什么?通常当人们说他们想要一个按值排序的树状图时,这是XY问题的一个例子。你想用匿名类根据值对
映射进行排序?对吗?@PianistaMichal it wow使用树映射和自定义比较器按值对映射进行排序非常容易,只要它不必是匿名类。匿名类不能有构造函数,所以这很难做到。我知道,但我需要按值对树进行排序。这样做有什么不对吗?那么它就不会是
树映射
…听起来像是你ant创建一个
列表
(或者可能是一个
树集
,如果你需要唯一性)…然后你可以用
比较器对它进行排序。我知道,但我需要按值对树进行排序。这样做有什么不对吗?那么它就不是
树映射
。听起来你想创建一个
列表
(如果需要唯一性,也可以使用
树集)…然后可以使用
比较器对其进行排序。