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

时间:2017-12-26 14:27:42

标签: kotlin

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

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

w.Write(result.Value);

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

由于

1 个答案:

答案 0 :(得分:12)

使用合格的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 { ... }