簡體   English   中英

如果不存在密鑰,如何使用默認值制作地圖?

[英]How to make a Map with default values if key is not present?

我想建立一個解析對象列表的數組映射。 當已經添加了該映射的索引時,我需要添加之前未添加的數組元素,否則我需要在Map中創建新元素。

假設我們有一個csv,其中包含這樣的數據

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

我想要這樣的地圖:

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

我很驚訝沒有該功能

有什么用,但是應該改進? (我有40萬行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

使用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)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM