使用Comparator在java中进行排序

时间:2014-07-29 12:31:51

标签: java set comparator

我正在尝试使用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;
        }
    });

但它不起作用。我的代码有什么问题请帮忙。

2 个答案:

答案 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个结果:

  1. 小于0(减去值)表示第一个元素落后于第二个
  2. 零意味着他们等于
  3. 多于0(积极值)表示第一个元素在第二个
  4. 之前

    通过将正反转为负反之,反之亦然,您可以定义升序和降序。

    所以这里是比较器的完整版本(我将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等于结果时,结果将为零;)

    使用步骤调试器在排序之前检查列表,然后检查结果。

相关问题