我有一个Java ArrayList,其中包含一些类型为ObjType的对象。
假设该对象具有两个字段:
- boolean 字段isManual()
- double 值getAffinity()
我正在尝试基于多个条件来订购此ArrayList:
-首先,所有具有isManual = true的对象的顺序与它们在ArrayList中已有的顺序相同
-然后我希望所有具有isManual = false的对象按getAffinityValue顺序排列(从最低到最大)
我想出了下面的代码,该代码不起作用(似乎是随机排序):
Collections.sort(coda, new Comparator<ObjType>() {
public int compare(ObjType a, ObjType b) {
boolean b1=a.isManual();
boolean b2=b.isManual();
if(b1 && b2) {
if (a.getAffinity() < b.getAffinity()) return 1;
if (a.getAffinity() > b.getAffinity()) return -1;
return 0;
}
if (b1) return -1;
if (b2) return 1;
if (a.getAffinity() < b.getAffinity()) return 1;
if (a.getAffinity() > b.getAffinity()) return -1;
return 0;
}
}
有什么建议吗?非常感谢!
答案 0 :(得分:1)
首先使用isManual = true的所有对象,其顺序相同 已经在ArrayList
中
然后,在两个对象都具有isManual == true
的情况下,您不应返回0
以外的任何内容。
然后我希望所有isManual = false的对象由 getAffinityValue(从最低到最大)
然后这些行:
if (a.getAffinity() < b.getAffinity()) return 1;
if (a.getAffinity() > b.getAffinity()) return -1;
应该返回它们返回的相反值。
所以试试这个:
Collections.sort(coda, new Comparator<ObjType>() {
public int compare(ObjType a, ObjType b) {
boolean b1=a.isManual();
boolean b2=b.isManual();
if(b1 && b2) return 0;
if (b1) return -1;
if (b2) return 1;
Double affinity1 = a.getAffinity();
Double affinity2 = b.getAffinity();
return affinity1.compareTo(affinity2);
}
});