LoginSignup
3
0

More than 5 years have passed since last update.

ScalaでMapのmapの挙動の注意点

Posted at

知らなかったのでメモ。

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

ソースを見て挙動を確認したいが難しいので諦める。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0