ome*_*ega 8 java sorting android arraylist
我有一个带有自定义对象的ArrayList.它们包含我要排序的复选框对象.我正在使用这个比较器函数对它进行排序:
我正在使用XOR运算符来检查它们是否彼此相等,然后否定它.
但是这不起作用,列表保持相同的顺序.
有谁知道什么是错的?
public class CustomSelectSort implements Comparator<ObjPerson> {
@Override
public int compare(ObjPerson o1, ObjPerson o2) {
return !(o1.select.isChecked() ^ o2.select.isChecked()) ? 1 : -1;
}
}
Run Code Online (Sandbox Code Playgroud)
Aub*_*bin 19
您只返回-1(小于)或+1(大于),从不返回0(等于).
比较它的两个参数的顺序.返回负整数,零或正整数,因为第一个参数小于,等于或大于第二个参数.
在前面的描述中,符号sgn(表达式)指定数学符号函数,其被定义为根据表达式的值是负,零还是正来返回-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)).一般来说,任何违反此条件的比较器都应清楚地表明这一事实.推荐的语言是"注意:这个比较器强加了与equals不一致的排序."
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;
}
Run Code Online (Sandbox Code Playgroud)
自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 );
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7532 次 |
最近记录: |