如何使用Kotlin折叠function将数组转换为地图?

我正试图通过折叠到一个索引的地图的数组。 不知何故IntelliJ标志,当我返回累加器,它期望单位。 当我删除返回它抱怨,我需要我原本想要返回的数据types。

代码如下(Item只是一个数据类)

constructor(vararg items: Item){ val itemMap = items.fold(mutableMapOf<Int, MutableList>(), { acc, item -> if (acc.containsKey(item.state)) { acc[item.state]?.add(item) } else { acc.put(item.state, mutableListOf(item)) } return acc }) } 

这里晚了一点,所以我可能会错过一些非常明显的事情。 任何帮助将非常感激。

谢谢

使用合格的return@fold操作符而不是return 。 在Kotlin中,没有限定词的返回意味着“从最内在的fun (忽略lambdas)中回归”。

 val itemMap = items.fold(mutableMapOf>(), { acc, item -> if (acc.containsKey(item.state)) { acc[item.state]?.add(item) } else { acc.put(item.state, mutableListOf(item)) } return@fold acc }) 

看看“return @”是什么意思? ,在语言参考中的标签处返回 。

或者只是使用结果expression式 ,省略return

 val itemMap = items.fold(mutableMapOf>(), { acc, item -> if (acc.containsKey(item.state)) { acc[item.state]?.add(item) } else { acc.put(item.state, mutableListOf(item)) } acc }) 

基本上,这种折叠是在标准库中实现的:请参阅.groupBy { ... }