我正在尝试使用Comparator
对排序进行排序,如下所示。
Set seatSet = tc.getTheatreSeat();
List listArr = new ArrayList(seatSet);
Collections.sort(listArr, new Comparator() {
public int compare(Object arg0, Object arg1) {
TheatreSeat r1 = (TheatreSeat) arg0;
TheatreSeat r2 = (TheatreSeat) arg1;
if (r2.getId() < r1.getId()) {
return 1;
}
return 0;
}
});
但它不起作用。我的代码有什么问题请帮忙。
答案 0 :(得分:5)
比较函数的返回值应为-1,0或+1,而不仅仅是1或0.
return Integer.compare(r1.getId(), r2.getId());
代替if语句应该完成这项工作。
使用lambda的Java 8排序将是
listArr.sort(Comparator.comparing(e -> e.getId()));
答案 1 :(得分:0)
它看起来很正确,它应该主要起作用。
为了理解比较器的int返回值,定义了3个结果:
通过将正反转为负反之,反之亦然,您可以定义升序和降序。
所以这里是比较器的完整版本(我将ID放在变量中以使其更易于阅读):
new Comparator() {
public int compare(Object val1, Object val2) {
int id1 = ((TheatreSeat) val1).getId();
int id2 = ((TheatreSeat) val2).getId();
return id1 - id2;
}
}
那我为什么要写id1-id2?因为它完全符合我们的要求。如果id2大于id1,则结果将小于零,反之亦然,当id1和id2等于结果时,结果将为零;)
使用步骤调试器在排序之前检查列表,然后检查结果。