没有为带有 Comparator<Map.Entry 的 TreeMap 找到合适的构造函数
No suitable constructor found for TreeMap with Comparator<Map.Entry
我想创建一个 TreeMap
和一个匿名 class 比较器来比较值。但是,我得到一个错误。我哪里错了?
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;
}
}
)
);
}
}
确切错误是
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>)
我认为你给 TreeMap<Integer,Integer>
的比较器应该知道如何比较 Integer
,而不是 Map.Entry
对象。
A TreeMap
按其键(而非条目)排序。你需要这样的东西,
edges.add(new TreeMap<Integer, Integer>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2);
}
}));
我想创建一个 TreeMap
和一个匿名 class 比较器来比较值。但是,我得到一个错误。我哪里错了?
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;
}
}
)
);
}
}
确切错误是
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>)
我认为你给 TreeMap<Integer,Integer>
的比较器应该知道如何比较 Integer
,而不是 Map.Entry
对象。
A TreeMap
按其键(而非条目)排序。你需要这样的东西,
edges.add(new TreeMap<Integer, Integer>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2);
}
}));