[英]kotlin how to sort List<Map<String, Any>>?
我想根据项目date
对 rawData 进行排序
val rawData: List<Map<String, Any>> = parseSampleData()
val sortData = rawData.sortedBy { it["date"] }
然后像这样在sortedBy
出错
Type parameter bound for R in
inline fun <T, R : Comparable<R>> Iterable<T>.sortedBy
(
crossinline selector: (T) → R?
)
: List<T>
is not satisfied: inferred type Any is not a subtype of Comparable<Any>
这也行不通
val sortedList = rawData.sortedWith(compareBy({ it.get("date") }))
有这个错误
Type mismatch.
Required:
Comparable<*>?
Found:
Any?
请帮忙
您面临的问题是 kotlin 不知道如何对Any?
类型的对象进行排序Any?
,这是it["date"]
和it.get("date")
。 如果您知道it["date"]
返回的类型,则将其Comparable
转换为该类型,前提是它实现了Comparable
(我认为它是某种应该具有可比性的日期对象)。 否则,您需要指定您的地图在值槽中包含的内容(再次提供它实现Comparable
)。
您必须将日期转换为LocalDate
或ZonedDateTime
,然后可以进行比较。
import java.time.LocalDate
fun main() {
val rawData: List<Map<String, Any>> = parseSampleData()
val sortData = rawData.sortedBy { it["date"] as LocalDate }
println(sortData)
}
fun parseSampleData() = listOf(
mapOf("date" to LocalDate.parse("2020-01-03")),
mapOf("date" to LocalDate.parse("2020-01-01")),
mapOf("date" to LocalDate.parse("2020-01-02")),
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.