如何在沒有任何變數的情況下更改地圖中的以下鍵全功能
HashMap(false -> List(20, 15, 20, 17), true -> List(50, 25, 45, 21, 100, 2000, 2100))
到
HashMap("String1" -> List(20, 15, 20, 17), "String2" -> List(50, 25, 45, 21, 100, 2000, 2100))
我嘗試使用 map 并且能夠將鍵更改為相同的字串但不能更改為不同的字串。
uj5u.com熱心網友回復:
您可以將映射應用于所有專案,但只關注鍵:
yourMap.map({ case (a, b) => (f(a), b) })
您可以定義f為函式或簡單的常量映射,例如:
Map(false -> "String1", true -> "String2")
把它們放在一起:
object HelloWorld {
def main(args: Array[String]) {
val m = Map(false -> List(20, 15, 20, 17), true -> List(50, 25, 45, 21, 100, 2000, 2100))
val f = Map(false -> "String1", true -> "String2")
val x = m.map({ case (a, b) => (f(a), b) })
System.out.println(x)
}
}
產生預期結果:
Map(String1 -> List(20, 15, 20, 17), String2 -> List(50, 25, 45, 21, 100, 2000, 2100))
如果你喜歡單線,你也可以避免單獨的地圖/功能:
yourMap.map({
x => x match {
case (false, v) => ("String1", v)
case (true, v) => ("String2", v)
}
})
另一種方法是只處理元組的左側:
yourMap.map({case (a, b) =>
(a match {
case false => "String1"
case true => "String2"}, b)})
并且只是為了完整性,如果您的唯一元素確實存在true并且false您可以這樣做:
yourMap.map({case (a, b) => (if (a) "String2" else "String1", b)})
uj5u.com熱心網友回復:
直接使用模式匹配匿名函式:
hashM
.map {
case (true, ints) => "String1" -> ints
case (false, ints) => "String2" -> ints
}
如果您使用非窮舉模式匹配,即您還想從集合中安全地過濾掉一些元組,然后使用collect:
hashM
.collect {
case (true, ints) => "String1" -> ints
}
你會到達這里:
Map(String1 -> List(50, 25, 45, 21, 100, 2000, 2100))
這可能是我能想到的最易讀的解決方案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/377874.html
