为什么以下语句对 有效.map()但对无效.flatMap()?
val tupled = input.map(x => (x*2, x*3))
//Compilation error: cannot resolve reference flatMap with such signature
val tupled = input.flatMap(x => (x*2, x*3))
Run Code Online (Sandbox Code Playgroud)
不过这个说法没有问题:
val tupled = input.flatMap(x => List(x*2, x*3))
Run Code Online (Sandbox Code Playgroud)
假设inputif 类型List[Int],map接受一个函数 from Intto A,而flatMap接受一个函数 from Intto List[A]。
根据您的用例,您可以选择其中之一,但它们绝对不可互换。
例如,如果您只是转换 a 的元素,则List通常要使用map:
List(1, 2, 3).map(x => x * 2) // List(2, 4, 6)
Run Code Online (Sandbox Code Playgroud)
但是你想改变的结构List- 例如 - “爆炸”每个元素到另一个列表然后扁平化它们,flatMap是你的朋友:
List(1, 2, 3).flatMap(x => List.fill(x)(x)) // List(1, 2, 2, 3, 3, 3)
Run Code Online (Sandbox Code Playgroud)
使用map你本来会有List(List(1), List(2, 2), List(3, 3, 3))。