我正在尝试通过折叠将数组转换为索引映射。不知何故,当我返回它期望 Unit 的累加器时,IntelliJ 会标记它。当我删除返回时,它提示我需要我最初想要返回的数据类型。
代码如下(Item只是一个数据类)
constructor(vararg items: Item){
val itemMap = items.fold(mutableMapOf<Int, MutableList<Item>>(), { 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 中,return
没有限定符意味着'从最里面返回 fun
(忽略 lambdas)'。
val itemMap = items.fold(mutableMapOf<Int, MutableList<Item>>(), { acc, item ->
if (acc.containsKey(item.state)) {
acc[item.state]?.add(item)
} else {
acc.put(item.state, mutableListOf(item))
}
return@fold acc
})
见 Whats does “return@” mean? , Return at Labels在语言引用中。
或者只是使用 result expression , 省略
return
:val itemMap = items.fold(mutableMapOf<Int, MutableList<Item>>(), { acc, item ->
if (acc.containsKey(item.state)) {
acc[item.state]?.add(item)
} else {
acc.put(item.state, mutableListOf(item))
}
acc
})
基本上,这种折叠是在标准库中实现的:见
.groupBy { ... }
.
关于kotlin - 如何使用 Kotlin 折叠函数将数组转换为 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47979930/