如何将等长Scala Person列表映射为指定ID对应的实例?
Scala替换Person列表ID的实现方案
已知定义:
case class Person(id: Int) val people = List(Person(4), Person(5), Person(6)) val ids = List(1, 2, 3)
要将people转换为使用ids对应位置ID的Person列表,有两种简洁的实现方式:
方式一:直接创建新Person实例
利用zip将两个列表的对应元素配对,再通过map生成新的Person对象:
val result = ids.zip(people).map { case (newId, _) => Person(newId) }
zip会把ids和people的对应元素组合成元组列表,后续map只需要取元组中的新ID来创建实例即可。
方式二:使用case class的copy方法
如果后续Person类扩展出其他字段,可通过case class自带的copy方法仅修改id字段(本例中仅id字段,效果与方式一一致):
val result = ids.zip(people).map { case (newId, person) => person.copy(id = newId) }
两种方式最终都会得到预期结果:List(Person(1), Person(2), Person(3))
内容的提问来源于stack exchange,提问作者JohnBigs
相关产品推荐
相关产品推荐

