Компаратор дает данные в неправильном порядке - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть ArrayList объекта Pojo, называемый classWiseArrayList.Одно из полей Pojo Object является средним.Мне нужно показать список в порядке возрастания.

Вот мой класс Pojo

data class ClassWiseData(
        @SerializedName("class_id")
        @Expose
        val classId: String? = null,
        @SerializedName("class_code")
        @Expose
        val classCode: String? = null,
        @SerializedName("average")
        @Expose
        val average: String? = null)

Вот мой код

 classWiseArrayList.sortWith(
                Comparator { o1, o2 -> o1?.average!!.compareTo(o2?.average!!) })

Сортировка работает нормально, когда ни один изсреднее значение равно 100, но если одно из среднего равно 100, среднее значение 100 приходит вверху, а не внизу.

Может кто-нибудь подсказать мне, в чем я совершаю ошибку.

Ответы [ 3 ]

0 голосов
/ 24 сентября 2018

Вы не можете сравнивать числа, используя сравнение строк (например, «86» в алфавитном порядке выше, чем «100»).Попробуйте преобразовать среднее в число (например, Int) и использовать вместо этого какой-нибудь числовой компаратор.

Например:

listOf<ClassWiseData>().sortedBy { it.average?.toIntOrNull() }
0 голосов
/ 24 сентября 2018
Comparator { o1, o2 ->
        o1.length.compareTo(o2.length).let {
            when(it) {
                0 -> o1.compareTo(o2)
                else -> it
            }
        }
    }

Этот компаратор будет работать.

Сначала он находит одинаковую длину строк, а затем сортирует их.

0 голосов
/ 24 сентября 2018
 classWiseArrayList.sortWith(
                Comparator { o1, o2 ->
                val a1 = o1.average!!.toInt()
                val a2 = o2.average!!.toInt()
                    a1.compareTo(a2)
                })

Кредит переходит к @ yole

...