如何使用Scala的map方法更新Point类型的Seq序列?
报错原因
- 你混淆了元组和自定义
Point类的取值语法:_1/_2是Scala元组(Tuple)的专属取值方式,你的Seq[Point]中存储的是Point类实例,只能通过类成员x/y访问坐标。 - 原有
map写法返回的是Seq[(Int, Int)]类型的元组序列,和你需要的Seq[Point]类型不匹配,自然会触发类型报错。
另外你之前写的for循环实际无法得到更新后的序列:Scala默认的Seq是不可变集合,for循环内部的update是每次循环的局部变量,既不会修改原序列,也无法在循环外访问到完整的更新结果,用map生成新序列的思路是正确的。
正确写法
直接在map的转换函数中访问Point的x、y成员,返回新的Point实例即可:
val updatedPoints = points.map(point => Point(point.x + 1, point.y + 1))
如果你的Point是样例类(case class),还可以用自带的copy方法简化写法:
val updatedPoints = points.map(point => point.copy(x = point.x + 1, y = point.y + 1))
内容的提问来源于stack exchange,提问作者neitche
相关产品推荐
相关产品推荐

