Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting Kotlin-对值为列表的映射进行排序_Sorting_Dictionary_Kotlin - Fatal编程技术网

Sorting Kotlin-对值为列表的映射进行排序

Sorting Kotlin-对值为列表的映射进行排序,sorting,dictionary,kotlin,Sorting,Dictionary,Kotlin,我有一个MutableMap,我正试图按照CustomObject中的日期字段对映射进行排序。我试过这样的东西 val unsortedMap: MutableMap<String, List<CustomObject>> // data already populated val sortedMap: MutableMap<String, List<CustomObject>> = LinkedHashMap() unsortedMap.entr

我有一个
MutableMap
,我正试图按照CustomObject中的日期字段对映射进行排序。我试过这样的东西

val unsortedMap: MutableMap<String, List<CustomObject>> // data already populated
val sortedMap: MutableMap<String, List<CustomObject>> = LinkedHashMap()
unsortedMap.entries.sortedBy { s -> s.value.sortedBy { t -> t.dateField } }.forEach { it2 -> sortedMap[it2.key] = it2.value }
val unsortedMap:MutableMap//数据已填充
val sortedMap:MutableMap=LinkedHashMap()
unsortedMap.entries.sortedMap by{s->s.value.sortedBy{t->t.dateField}。forEach{it2->sortedMap[it2.key]=it2.value}
但是我得到了一个
类型不匹配。必需:找到可比较的:在按日期字段排序的块中列出
。有没有办法做到这一点? 谢谢。

问题出在这里:

sortedBy { s -> s.value.sortedBy { t -> t.dateField } }
通过排序的外部
需要lambda定义一些内容,以允许它比较不同的
列表
。但是,您只是通过{…}
返回了
s.value.sortedBy。也就是说,这里返回的是一个
列表
,而不是可以比较自定义对象列表的东西

如果要按每个列表中最早的
dateField
s对地图进行排序,则需要如下内容:

sortedBy { s -> s.value.sortedBy { t -> t.dateField }.first().dateField }
这将首先按照对象的
dateField
对对象列表进行排序,然后从列表中的第一项中提取
dateField
,并将其用于比较

事实证明,排序然后获取第一项是很常见的,因此有一个函数可以简化它:

sortedBy { s -> s.value.minBy { t -> t.dateField }!!.dateField }

您需要包含更多的代码。我看不到
eventsMap
的定义。此外,请不要总结错误消息(“类型不匹配错误”)。。。而是包含整个错误消息。此外,我不确定是否可以可靠地使用列表作为Kotlin中可变映射的键。我怀疑有更好的方法来做你正在尝试的事情。你能描述一下你的整个问题吗?@JoelFan谢谢你的回答。我已经编辑了这个问题以包含更多信息。我更改了代码以使用字符串作为键。我有一个映射,它的键是字符串,值是自定义数据对象的列表。我想根据自定义数据对象中的日期字段对地图进行排序。这是我的第一个kotlin项目,当值为列表时,我看不到对地图进行排序的方法。这解决了问题,感谢您的解释!