Collections.sort(list, new Comparator<Data>(){
public int compare(Data obj1, Data obj2){
return (obj1.value > obj2.value) ? -1: (obj1.value > obj2.value) ? 1:0 ;
}
});
我正在使用此代码按不升序对列表进行排序,此方法有效,但我不明白它是如何在内部工作的。
此代码如何处理返回值-1,1,0
?
为什么这种方法比较同样的事情(obj1.value > obj2.value)
两次?
list是一个ArrayList
类型引用变量,其中包含Data
类型对象,Data类如下所示
private static class Data{
private String key;
private int value;
public Data(String key, int value){
this.key = key;
this.value = value;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
}
答案 0 :(得分:1)
一位评论者表示,您的比较方法编码不正确。第一次比较可能应该是<
,而不是>
。如果您要阅读Comparator<T>
https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html的Javadoc,您会看到如果第一个参数在第二个参数之前它应该返回负值,如果它们是等价的则返回0,如果是等价则返回正值第一个参数跟随第二个。这不是你的代码所做的。