Kotlin Hashmap:更改键值和子元素值
Kotlin Hashmap: Change key value and subelement value
我是 Kotlin(和 Java)的新手,有一个问题:我有一个名为 data
的 Hashmap。我想更改键值(例如 "Training Day 1"
到 "Blablabla"
)以及 ArrayList 中的值(例如在 trainingDay2
处将 "Player8"
更改为 "Player1"
) .此外,我想向 trainingDay4
添加元素。我该怎么做?
val data: HashMap<String, List<String>> get() {
val listData = HashMap<String, List<String>>()
val trainingDay1 = ArrayList<String>()
trainingDay1.add("Player1")
trainingDay1.add("Player2")
trainingDay1.add("Player3")
trainingDay1.add("Player4")
trainingDay1.add("Player5")
trainingDay1.add("Player6")
trainingDay1.add("Player7")
val trainingDay2 = ArrayList<String>()
trainingDay2.add("Player8")
trainingDay2.add("Player9")
trainingDay2.add("Player10")
trainingDay2.add("Player11")
trainingDay2.add("Player12")
val trainingDay3 = ArrayList<String>()
trainingDay3.add("Player13")
trainingDay3.add("Player14")
trainingDay3.add("Player15")
trainingDay3.add("Player16")
trainingDay3.add("Player17")
trainingDay3.add("Player18")
val trainingDay4 = ArrayList<String>()
listData["Training Day 1"] = trainingDay1
listData["Training Day 2"] = trainingDay2
listData["Training Day 3"] = trainingDay3
listData["Training Day 4"] = trainingDay4
return listData
}
我试过使用 replace 和 put 方法,但它们不起作用。
data.replace("Training Day 1", listOf("Training Day 4"))
data.keys
res45: kotlin.collections.MutableSet<kotlin.String> = [Training Day 1, Training Day 2, Training Day 3, "Training Day 4"]
data.put("Training Day 1", listOf("Player000"))
res40: kotlin.collections.List<kotlin.String>? = ["Player1", "Player2", "Player3", "Player4", "Player5", "Player6", "Player7"]
I would like to change the key values (e.g. "Training Day 1" to
"Blablabla")
data.remove("Training Day 1")?.let {
data.put("Blablabla", it)
}
and also the values within the ArrayList (e.g. at trainingDay2 change
"Player8" to "Player1").
data["Training Day 2"] = data.getValue("Training Day 2").map {
if (it == "Player8") "Player1" else it
}
Furthermore I would like to add elements to trainingDay4
data["Training Day 4"] = data.getValue("Training Day 4") + "Player19"
鉴于您需要经常改变列表,我建议将 data
的类型更改为 HashMap<String, ArrayList<String>>
。然后你可以执行最后两个操作作为
//replace
data["Training Day 2"]?.let {
it[it.indexOf("Player8")] = "Player1"
}
// add
data["Training Day 4"]?.add("Player19")
我是 Kotlin(和 Java)的新手,有一个问题:我有一个名为 data
的 Hashmap。我想更改键值(例如 "Training Day 1"
到 "Blablabla"
)以及 ArrayList 中的值(例如在 trainingDay2
处将 "Player8"
更改为 "Player1"
) .此外,我想向 trainingDay4
添加元素。我该怎么做?
val data: HashMap<String, List<String>> get() {
val listData = HashMap<String, List<String>>()
val trainingDay1 = ArrayList<String>()
trainingDay1.add("Player1")
trainingDay1.add("Player2")
trainingDay1.add("Player3")
trainingDay1.add("Player4")
trainingDay1.add("Player5")
trainingDay1.add("Player6")
trainingDay1.add("Player7")
val trainingDay2 = ArrayList<String>()
trainingDay2.add("Player8")
trainingDay2.add("Player9")
trainingDay2.add("Player10")
trainingDay2.add("Player11")
trainingDay2.add("Player12")
val trainingDay3 = ArrayList<String>()
trainingDay3.add("Player13")
trainingDay3.add("Player14")
trainingDay3.add("Player15")
trainingDay3.add("Player16")
trainingDay3.add("Player17")
trainingDay3.add("Player18")
val trainingDay4 = ArrayList<String>()
listData["Training Day 1"] = trainingDay1
listData["Training Day 2"] = trainingDay2
listData["Training Day 3"] = trainingDay3
listData["Training Day 4"] = trainingDay4
return listData
}
我试过使用 replace 和 put 方法,但它们不起作用。
data.replace("Training Day 1", listOf("Training Day 4"))
data.keys
res45: kotlin.collections.MutableSet<kotlin.String> = [Training Day 1, Training Day 2, Training Day 3, "Training Day 4"]
data.put("Training Day 1", listOf("Player000"))
res40: kotlin.collections.List<kotlin.String>? = ["Player1", "Player2", "Player3", "Player4", "Player5", "Player6", "Player7"]
I would like to change the key values (e.g. "Training Day 1" to "Blablabla")
data.remove("Training Day 1")?.let {
data.put("Blablabla", it)
}
and also the values within the ArrayList (e.g. at trainingDay2 change "Player8" to "Player1").
data["Training Day 2"] = data.getValue("Training Day 2").map {
if (it == "Player8") "Player1" else it
}
Furthermore I would like to add elements to trainingDay4
data["Training Day 4"] = data.getValue("Training Day 4") + "Player19"
鉴于您需要经常改变列表,我建议将 data
的类型更改为 HashMap<String, ArrayList<String>>
。然后你可以执行最后两个操作作为
//replace
data["Training Day 2"]?.let {
it[it.indexOf("Player8")] = "Player1"
}
// add
data["Training Day 4"]?.add("Player19")