我原以为在Scala中,使用map(f).flatten
的构造方式等同于flatMap(f)
。但是通过这个例子,情况并非如此。我想知道这个case类的作用是什么。如果我使用整数,这两种写法是等价的。但在我的情况下,它们不等价。
case class CTest(v: Int)
val s = Set(Map(CTest(0) -> List(0, 3), CTest(1) -> List(0, 2)))
val possibilities = s flatMap { m =>
val mapping = m flatMap {
case (label, destNodes) => destNodes map {
case nodes => (label, nodes) }
}
mapping
}
possibilities
产量
Set((CTest(0),3), (CTest(1), 2))
而
case class CTest(v: Int)
val s = Set(Map(CTest(0) -> List(0, 3), CTest(1) -> List(0, 2)))
val possibilities = s flatMap { m =>
val mapping = m map {
case (label, destNodes) => destNodes map {
case nodes => (label, nodes) }
}
mapping.flatten
}
possibilities
产量。Set((CTest(0),0), (CTest(0),3), (CTest(1),0), (CTest(1),2))
任何想法为什么?