繁体   English   中英

kotlin 如何对列表进行排序<Map<String, Any> &gt;?

[英]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 )。

您必须将日期转换为LocalDateZonedDateTime ,然后可以进行比较。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM