您只返回 -1(小于)或 +1(大于),从不返回 0(等于)。
请参阅java.util.Comparator 定义:
比较它的两个参数的顺序。返回负整数、零或正整数,因为第一个参数小于、等于或大于第二个。
在前面的描述中,符号sgn(expression)表示数学符号函数,它被定义为根据表达式的值是负数、零还是正数返回-1、0或1之一。
实现者必须确保所有 x 和 y 的 sgn(compare(x, y)) == -sgn(compare(y, x))。(这意味着当且仅当 compare(y, x) 抛出异常时 compare(x, y) 必须抛出异常。)
实现者还必须确保关系是可传递的: ((compare(x, y)>0) && (compare(y, z)>0)) 意味着 compare(x, z)>0。
最后,实现者必须确保 compare(x, y)==0 意味着所有 z 的 sgn(compare(x, z))==sgn(compare(y, z))。
通常是这样,但并不严格要求 (compare(x, y)==0) == (x.equals(y))。一般来说,任何违反此条件的比较器都应清楚地表明这一事实。推荐的语言是“注意:这个比较器强加了与等于不一致的排序。”
Java 1.7 之前的提案:
public int compare(ObjPerson o1, ObjPerson o2) {
boolean b1 = o1.select.isChecked();
boolean b2 = o2.select.isChecked();
if( b1 && ! b2 ) {
return +1;
}
if( ! b1 && b2 ) {
return -1;
}
return 0;
}
从 Java 1.7 开始的提案:
public int compare(ObjPerson o1, ObjPerson o2) {
boolean b1 = o1.select.isChecked();
boolean b2 = o2.select.isChecked();
return Boolean.compare( b1, b2 );
}