知らなかったのでメモ。
Mapのmapメソッドは、mapに渡す関数の返り値型によって、mapの返却値の型はMapになるときとListになる時がある。
この違いに気づかず若干ハマった。
結論
調べた範囲では、map(f: A => B)とすると、以下結論になる。
- B がタプルもしくはc -> dの形の場合はmapの返り値はMap
- B がそれ以外の場合は返り値はList
例
以下、同じMapのmapメソッドでも、map1, map2はMap型、list1はList型として変える。
object MapConversion extends App {
val newMap = Map("1" -> 1, "2" -> 2, "3" -> 3)
val map1 = newMap.map {
case (_, value) => (Math.random(), value)
}
val map2 = newMap.map {
case (_, value) => Math.random() -> value
}
val list1 = newMap.map {
case (_, value) => value
}
println(map1) // => Map(0.15985975180002765 -> 1, 0.6619101600969522 -> 2, 0.18256060363818238 -> 3)
println(map2) // => Map(0.31876372630036387 -> 1, 7.773814391255351E-4 -> 2, 0.2837391028402594 -> 3)
println(list1) // => List(1, 2, 3)
}
ソースを見て挙動を確認したいが難しいので諦める。