Я думал, что Scala construct 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))
Любая идея, почему?