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")