Как сделать карту со значениями по умолчанию, если ключа нет? - PullRequest
0 голосов
/ 10 апреля 2019

Я хочу построить карту массива, разбирая список объектов. Когда индекс этой карты уже добавлен, мне нужно добавить элементы массива, которые не были добавлены ранее, в противном случае мне нужно создать новый элемент на карте.

Допустим, у нас есть CSV с такими данными

names,nicknames
Tom,tommy;timmy
Sam,sammy
Tom,timmy;mymen

И я хочу такую ​​карту:

Map["Tom"] = ["tommy", "timmy", "mymen"]
Map["Sam"] = ["sammy"]

Я очень удивлен, что для этого нет встроенной функции

Что работает, но должно быть улучшено? (у меня есть 400k строк CSV для анализа)

    val myObjectList: List<myObject> = beans.parse() /* importing POJOs from csv*/
    val myMap: MutableMap<String,List<String>> = mutableMapOf()

    myObjectList.forEach { entry ->
       if ( myMap[entry.name].isNullOrEmpty()) {
           myMap[entry.name] = entry.nicknames.split(";")
       } else {
           myMap[entry.name]!!.plus(entry.nicknames.split(";"))
       }
    }


    return myMap

1 Ответ

1 голос
/ 10 апреля 2019

Использование getOrPut как:

data class MyObject(
        val name: String,
        val nicknames: String
)

fun main() {
    val myObjectList = listOf(
            MyObject("primary", "secondary1;secondary2"),
            MyObject("primary", "secondary3")
    )
    val nameToNicks = mutableMapOf<String, MutableList<String>>()

    myObjectList.forEach { myObj ->
        nameToNicks.getOrPut(myObj.name, {mutableListOf()}) .addAll(myObj.nicknames.split(";"))
    }

    print(nameToNicks)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...