我想构建一个解析对象列表的数组映射。 当已经添加了该映射的索引时,我需要添加之前未添加的数组元素,否则需要在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
答案 0 :(得分:1)
使用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)
}