比较器以错误的顺序提供数据

时间:2018-09-24 11:19:13

标签: java android arraylist kotlin comparator

我有一个名为classWiseArrayList的Pojo对象的ArrayList。 Pojo Object的领域之一是平均水平。 我需要按升序显示arraylist。

这是我的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 :(得分:2)

您不能使用字符串比较来比较数字(例如,“ 86”按字母顺序比“ 100”高)。尝试将平均值转换为数字(即Int),并使用一些数字比较器。

例如:

listOf<ClassWiseData>().sortedBy { it.average?.toIntOrNull() }

答案 1 :(得分:0)

 classWiseArrayList.sortWith(
                Comparator { o1, o2 ->
                val a1 = o1.average!!.toInt()
                val a2 = o2.average!!.toInt()
                    a1.compareTo(a2)
                })

信用归@yole

答案 2 :(得分:0)

Comparator { o1, o2 ->
        o1.length.compareTo(o2.length).let {
            when(it) {
                0 -> o1.compareTo(o2)
                else -> it
            }
        }
    }

此比较器将工作。

首先,它查找字符串的长度是否相等,然后对其进行排序。