我有一个名为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个平均值位于顶部而不是底部。
有人可以指导我发生什么错误吗?
答案 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
}
}
}
此比较器将工作。
首先,它查找字符串的长度是否相等,然后对其进行排序。