比较器以错误的顺序给出数据

Comparator gives data in wrong order

我有一个名为 classWiseArrayList 的 Pojo 对象的 ArrayList。 Pojo Object 的其中一个字段是平均的。我需要按升序显示数组列表。

这是我的 Pojo Class

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!!) })
            

当平均值的 none 等于 100 时,排序工作正常,但如果平均值之一为 100,则 100 的平均值排在顶部而不是底部。

我做错了什么?

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

归功于@yole

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

例如:

listOf<ClassWiseData>().sortedBy { it.average?.toIntOrNull() }
Comparator { o1, o2 ->
        o1.length.compareTo(o2.length).let {
            when(it) {
                0 -> o1.compareTo(o2)
                else -> it
            }
        }
    }

这个比较器可以工作。

首先判断字符串的长度是否相等,然后对它们进行排序。