kotlin - 如何使用 Kotlin 折叠函数将数组转换为 map ?

标签 kotlin

我正在尝试通过折叠将数组转换为索引映射。不知何故,当我返回它期望 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/

相关文章:

kotlin - 如何异步映射序列

android - WorkManager 的定期工作请求不起作用

kotlin - 带注释的可为空类型的条件值声明抛出 'type inference failed'

jpa - 将Kotlin不可变实体与JPA一起使用时发生意外更改

java - Spring/Spring Boot 转换 - 如何在 Converters 上建立链?

java - 为什么Android程序无法在我的手机上运行(它可以在虚拟手机上正常运行)

android - 当我在另一个函数中等待异常时,如何在Kotlin协程中捕获异常?

android - 调试 kotlin 源代码

java - Kotlin 数据类打包

Kotlin:将枚举与 when 一起使用