我正在尝试在自定义类型上创建比较器。
Type {
int state = 0; // can be 0 or 1
String name = ""; // can be anything
}
我正在尝试对列表进行排序,首先,列表顶部是具有一个状态的项目,而另一个状态则是底部。
在第二步中,两个部分(第1部分:状态0,第2部分:状态1)中的项目按字母顺序排序。
我试过这个:
@Override
public int compare(Type i1, Type i2) {
boolean a = i1.state == 1;
boolean b = i2.state == 1;
if (a && b) {
return i1.name.compareTo(i2.name);
} else if (a && !b) {
return 1;
} else {
return -1;
}
}
但是项目随着每个项目状态的变化而随机化。
列出这些项目:
name : A B C D E F G H I J K
state: 1 0 1 1 0 1 0 0 1 1 0
应该像这样列出:
B 0
E 0
G 0
H 0
K 0
A 1
C 1
D 1
F 1
I 1
J 1
有人知道如何解决它吗? 感谢
答案 0 :(得分:3)
当两个状态等于零时,您的代码会中断。您可以使用此条件修复它
if (a == b) ...
而不是
if (a && b)
...或者试试这个:
@Override
public int compare(Type i1, Type i2) {
int res = i1.state - i2.state;
if (res == 0) {
return i1.name.compareTo(i2.name);
} else {
return res;
}
}
答案 1 :(得分:0)
为什么不实施Comparable
并在compareTo
方法中使用相同的逻辑?