比较法违反其总合同!在java中对图像轮廓进行排序时

比较法违反其总合同!在java中对图像轮廓进行排序时,java,sorting,compare,opencv-contour,Java,Sorting,Compare,Opencv Contour,我知道可能还有其他类似的问题,但它们仍然没有解决我的问题。我尝试使用以下方法根据轮廓区域对图像轮廓进行排序: contours.sort((Object o1, Object o2) -> (int) (Imgproc.contourArea((MatOfPoint) o1) - Imgproc.contourArea((MatOfPoint) o2) + 0.5)); 您可以看到排序比较很简单(只是区域之间的差异),但我仍然得到了提到的错误。我不明白为什么。也许是因为面积是两倍,我把

我知道可能还有其他类似的问题,但它们仍然没有解决我的问题。我尝试使用以下方法根据轮廓区域对图像轮廓进行排序:

contours.sort((Object o1, Object o2) -> 
(int) (Imgproc.contourArea((MatOfPoint) o1) - Imgproc.contourArea((MatOfPoint) o2) + 0.5));

您可以看到排序比较很简单(只是区域之间的差异),但我仍然得到了提到的错误。我不明白为什么。也许是因为面积是两倍,我把差值转换成int?谢谢。

看起来您正在尝试比较:



强制转换也有点可疑:除非您实际尝试对
对象的列表进行排序,否则请使用元素类型。假设
等高线
是一个
列表,看起来您正在尝试比较:



强制转换也有点可疑:除非您实际尝试对
对象的列表进行排序,否则请使用元素类型。假设
等高线
是一个
列表,这可能是因为你的
+0.5
,为什么你会有这样的列表?不。没有它是同样的问题。这可能是因为你的
+0.5
,为什么你会有这样的列表?不。没有它是同样的问题
contours.sort(Comparator.comparingDouble(a -> ImgProc.contourArea((MatOfPoint) a));
contours.sort(Comparator.comparingDouble(ImgProc::contourArea));