java.lang.IllegalArgumentException:比较方法违反了它的一般约定,仅在特定的测试用例中
这是我的比较器函数:java.lang.IllegalArgumentException:比较方法违反了它的一般约定,仅在特定的测试用例中,java,sorting,comparator,Java,Sorting,Comparator,这是我的比较器函数: Arrays.sort(intervals, (a, b)->{ return (a[0] > b[0]) ? 1 : ((a[0] < b[0]) ? -1 : ((a[1] > b[1]) ? 1 : -1)); }); 如果您未能涵盖案例,您的代码甚至无法编译 按原样,您的代码可以编译,但它不能满足比较方法的要求。不同的问题 这是总合同: 如果a在a[1]和b[1]切换时没有对称性。下面将解决这个问题 return a[0] >
Arrays.sort(intervals, (a, b)->{
return (a[0] > b[0]) ? 1 : ((a[0] < b[0]) ? -1 : ((a[1] > b[1]) ? 1 : -1));
});
如果您未能涵盖案例,您的代码甚至无法编译 按原样,您的代码可以编译,但它不能满足比较方法的要求。不同的问题 这是总合同:
return a[0] > b[0]) ? 1
: a[0] < b[0] ? -1
: a[1] > b[1] ? 1
: a[1] < b[1] ? -1
: 0;
1) 张贴你的演示问题。因此,“MRE”将显示如何使用数据创建两个数组,以及如何调用数组上的排序。我们应该能够复制/粘贴/编译/测试代码以查看异常。2) 将问题中的堆栈轨迹以非图像的形式发布。结果永远不会返回0(当a和b相等时应返回)。是否确定第三个?是的,输入3。项目。
return a[0] > b[0]) ? 1
: a[0] < b[0] ? -1
: a[1] > b[1] ? 1
: a[1] < b[1] ? -1
: 0;
Arrays.sort(intervals, Comparator.comparing(c -> c[0]).thenComparing(c -> c[1]));