Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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
如何使用Kotlin fold函数将数组转换为贴图?_Kotlin - Fatal编程技术网

如何使用Kotlin fold函数将数组转换为贴图?

如何使用Kotlin fold函数将数组转换为贴图?,kotlin,Kotlin,我试图通过折叠将数组转换为索引映射。不知何故,IntelliJ在返回累加器时会标记它所期望的单位。当我删除返回时,它抱怨我需要我最初想要返回的数据类型 代码如下(Item只是一个数据类) 构造函数(vararg items:Item){ val itemMap=items.fold(mutableMapOf(),{acc,item-> 如果(根据集装箱(项目状态)){ 附件[项目状态]?.添加(项目) }否则{ acc.put(项目状态,可变列表(项目)) } 返回acc }) } 这里有点晚

我试图通过折叠将数组转换为索引映射。不知何故,IntelliJ在返回累加器时会标记它所期望的单位。当我删除返回时,它抱怨我需要我最初想要返回的数据类型

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

构造函数(vararg items:Item){
val itemMap=items.fold(mutableMapOf(),{acc,item->
如果(根据集装箱(项目状态)){
附件[项目状态]?.添加(项目)
}否则{
acc.put(项目状态,可变列表(项目))
}
返回acc
})
}
这里有点晚了,所以我可能错过了一些非常明显的事情。任何帮助都将不胜感激


谢谢

使用合格的
return@fold
运算符而不是
返回值
。在Kotlin中,
return
不带限定符意味着“从最里面的
fun
(忽略lambdas)”返回


基本上,这种折叠是在标准库中实现的:请参见。

删除
返回
。FWIW,您还可以使用
val itemMap=items.groupBy{it.state}
。谢谢@OliverCharlesworth。这要容易得多。我不知道groupBy函数。
    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
    })

}
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
})
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
})