比较器以错误的顺序给出数据
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
}
}
}
这个比较器可以工作。
首先判断字符串的长度是否相等,然后对它们进行排序。
我有一个名为 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
}
}
}
这个比较器可以工作。
首先判断字符串的长度是否相等,然后对它们进行排序。