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;
}
}
正如一位评论者所说,您的比较方法编码不正确。第一个比较应该是<
,而不是>
。如果您要阅读Comparator<T>
https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html的Javadocs,您将看到,如果第一个参数在第二个参数之前,它应该返回一个负值,如果它们相等,则返回0,如果第一个参数在第二个参数之后,则返回一个正值。