у меня есть
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 auto complete не дает мне метод add()
.
Я должен вместо этого использовать:
var peopleWithThisHobby = map.getOrElse(hobby, { mutableListOf() }) peopleWithThisHobby = peopleWithThisHobby.plus(name) map[hobby] = peopleWithThisHobby
Что дает? Это по дизайну? Что происходит с mutableList()
из вызова getOrElse
?
Я использую версию плагина Kotlin: 1.1.3-eap-85-IJ2017.2-1
Это потому, что в вашем определении карты есть List
вместо MutableList
как значение. Измените его на MutableList
и он сработает.
val map = mutableMapOf<String, List<String>>()
Измените значение выше:
val map = mutableMapOf<String, MutableList<String>>()