Как я могу решить «Метод сравнения нарушает его общий контракт!» проблема в Kotlin? - PullRequest
0 голосов
/ 30 марта 2020

Я получил эту ошибку для сравнения двух contourAreas в проекте openCV.

java .lang.IllegalArgumentException: метод сравнения нарушает его общий контракт!

И я Я пробовал:

        Collections.sort(contours) { o1, o2 ->
            val area1 = Imgproc.contourArea(o1)
            val area2 = Imgproc.contourArea(o2)
            (area2 - area1).toInt()
        }
        contours.sortWith(Comparator { o1, o2 ->
            val area1 = Imgproc.contourArea(o1)
            val area2 = Imgproc.contourArea(o2)
            (area2 - area1).toInt()
        })

И я подумал, что вышеупомянутое сомнительно, поэтому я попытался:

        contours.sortWith(Comparator { o1, o2 ->
            val area1 = Imgproc.contourArea(o1)
            val area2 = Imgproc.contourArea(o2)
            val res = (area2 - area1)

            if (res > 0) {
                return@Comparator 1
            } else if(res < 0){
                return@Comparator -1
            }
            return@Comparator 0
        })

Но ни один из них не работал должным образом, и мое приложение было сломано. Как я могу решить эту проблему?

...