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