问题描述:
自定义排序一个List<Pair<Integer, Integer>>,根据pair的key由小到大排序,如果相同,则根据pair的value由大到小排序。
最开始写的比较器如下:
Collections.sort(list, new Comparator<Pair<Integer, Integer>>() {
@Override
public int compare(final Pair<Integer, Integer> o1, final Pair<Integer, Integer> o2) {
if(o1.getKey() != o2.getKey())
return o1.getKey() - o2.getKey();
else{
return o2.getValue() - o1.getValue();
}
}
});
但是由于Pair的getKey()和getValue()方法返回的是Object对象,是不能直接比较两个对象的,这里耽误了好久- -。
正确的写法是新建变量存储Pair的key和value值,再进行比较。
Collections.sort(list, new Comparator<Pair<Integer, Integer>>() {
@Override
public int compare(final Pair<Integer, Integer> o1, final Pair<Integer, Integer> o2) {
int x1 = o1.getKey();
int y1 = o1.getValue();
int x2 = o2.getKey();
int y2 = o2.getValue();
if(x1 != x2)
return x1 - x2;
else{
return y2 - y1;
}
}
});