Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中使用比较器的排序集_Java_Set_Comparator - Fatal编程技术网

java中使用比较器的排序集

java中使用比较器的排序集,java,set,comparator,Java,Set,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

我试图使用比较器对集合进行排序,如下所示

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;
        }
    });
Set seatSet=tc.getTheatreSeat();
List listArr=新阵列列表(seatSet);
Collections.sort(listArr,newcomparator(){
公共整数比较(对象arg0、对象arg1){
剧院电视台r1=(剧院电视台)arg0;
剧院座位r2=(剧院座位)arg1;
if(r2.getId()

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

比较函数的返回值应该是-1、0或+1,而不仅仅是1或0

return Integer.compare(r1.getId(), r2.getId());
代替if语句应该完成这项工作

使用lambda的Java8排序是

listArr.sort(Comparator.comparing(e -> e.getId()));

它看起来很正确,应该大部分都能工作

为了理解比较器的int返回值,定义了3个结果:

  • 小于0(负值)表示第一个元素落后于第二个元素
  • 零意味着它们相等
  • 大于0(正值)表示第一个元素在第二个元素之前
  • 通过将正反转为负,反之亦然,您可以定义升序和降序

    这里是comparator的完整版本(我将ID放在变量中以使其更易于读取):

    那么我为什么要写id1-id2呢?因为这正是我们想要的结果。如果id2大于id1,结果将小于零,反之亦然;当id1和id2等于时,结果将为零;)


    使用step调试器在排序前检查列表,在排序后检查结果。

    1)缩进代码。2) “它不起作用”不是一个好的描述。3) 我们不知道您使用的是哪种类型的集合-大多数都不允许显式排序。4) 请编写一个简短但完整的程序来演示这个问题。它以什么方式不起作用?我看到您已将
    集合的内容复制到
    列表中
    ,并试图对
    列表
    进行排序,那么您为什么要调用post
    排序集合
    ?集合包含类剧场的对象,其中有值id rownumber等。我想用id对其进行排序。如何进行排序>很抱歉,我在这里发布了一个问题,因为我是新问题。请注意,通过减法进行比较的技术将失败,因为大的Enough数将导致整数溢出。见:
    new Comparator() {
      public int compare(Object val1, Object val2) {
        int id1 = ((TheatreSeat) val1).getId();
        int id2 = ((TheatreSeat) val2).getId();
        return id1 - id2;
      }
    }