【发布时间】:2016-01-20 13:34:14
【问题描述】:
一些嵌套的案例类和字段addresses是Seq[Address]:
// ... means other fields
case class Street(name: String, ...)
case class Address(street: Street, ...)
case class Company(addresses: Seq[Address], ...)
case class Employee(company: Company, ...)
我有一个员工:
val employee = Employee(Company(Seq(
Address(Street("aaa street")),
Address(Street("bbb street")),
Address(Street("bpp street")))))
它有 3 个地址。
我只想将以“b”开头的街道大写。我的代码很乱,如下所示:
val modified = employee.copy(company = employee.company.copy(addresses =
employee.company.addresses.map { address =>
address.copy(street = address.street.copy(name = {
if (address.street.name.startsWith("b")) {
address.street.name.capitalize
} else {
address.street.name
}
}))
}))
modified 员工是:
Employee(Company(List(
Address(Street(aaa street)),
Address(Street(Bbb street)),
Address(Street(Bpp street)))))
我正在寻找改进它的方法,但找不到。甚至尝试过Monocle,但无法将其应用于此问题。
有什么办法可以改善吗?
PS:有两个关键要求:
- 仅使用不可变数据
- 不要丢失其他现有字段
【问题讨论】:
标签: scala case-class lenses