0

在斯卡拉:

scala> val xs = List(List(1, 3, 5), List(3, 4, 30))
xs: List[List[Int]] = List(List(1, 3, 5), List(3, 4, 30))

scala> xs flatMap {x => x + 1}
<console>:9: error: type mismatch;
 found   : Int(1)
 required: String
              xs flatMap {x => x + 1}

为什么?

4

3 回答 3

2

最简单的解决方案是在执行 map 之前展平您的列表:

xs.flatten.map { _ + 1 }

您的错误的原因是 flatMap 不会展平您执行它的集合,它会展平函数在其参数中返回的结果。

于 2015-09-11T10:35:38.933 回答
2

String不幸的是,在该错误消息中是一个误导性的推论。

理想情况下编译器会给你的错误是

found   : Int => Int
required: Int => List[Int]
于 2015-09-11T10:36:24.663 回答
1

xflatMapis a List[Int]not anInt中,我想到了两个解决方案:

scala> xs.flatMap(identity).map(_ + 1)
res2: List[Int] = List(2, 4, 6, 4, 5, 31)

scala> xs.flatMap(_.map(_ + 1))
res3: List[Int] = List(2, 4, 6, 4, 5, 31)
于 2015-09-11T10:34:05.953 回答