2017-06-30 1 views
0

私はラインpeopleWithThisHobby.plus(name)Kotlin mutableList()は地図から返さ:: getOrElseは(アドオンを公開していません)

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) 

を持っている、の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

答えて

5

マップ定義が値としてListの代わりMutableListを持っているためです。それをMutableListに変更すると正常に機能します。

val map = mutableMapOf<String, List<String>>() 

変更上記に:

val map = mutableMapOf<String, MutableList<String>>() 
関連する問題