从Map :: getOrElse返回的Kotlin mutableList()不公开add()
我有
data class Person(var name: String, var hobbies: List<String>) val people = mutableListOf( Person("joe", asList("biking", "baking")), Person("jane", asList("baking")), Person("jack", asList("painting")) ) val map = mutableMapOf<String, List<String>>() for ((name, hobbies) in people) { for (hobby in hobbies) { var peopleWithThisHobby = map.getOrElse(hobby, { mutableListOf() }) peopleWithThisHobby.plus(name) map[hobby] = peopleWithThisHobby } } println(map)
在线peopleWithThisHobby.plus(name)
,IntelliJ自动完成不给我的add()
方法。
我不得不使用:
var peopleWithThisHobby = map.getOrElse(hobby, { mutableListOf() }) peopleWithThisHobby = peopleWithThisHobby.plus(name) map[hobby] = peopleWithThisHobby
是什么赋予了? 这是由设计? 从getOrElse
调用中返回的mutableList()
发生了什么?
我正在使用Kotlin插件版本:1.1.3-eap-85-IJ2017.2-1
那是因为你的地图定义有一个List
而不是MutableList
作为值。 将其更改为MutableList
,它将工作。
val map = mutableMapOf<String, List<String>>()
将上面的内容更改为:
val map = mutableMapOf<String, MutableList<String>>()