Một số lớp trường hợp lồng nhau và lĩnh vực addresses
là một Seq[Address]
:Làm thế nào để sửa đổi trường hợp lồng nhau này với trường "Seq"?
// ... means other fields
case class Street(name: String, ...)
case class Address(street: Street, ...)
case class Company(addresses: Seq[Address], ...)
case class Employee(company: Company, ...)
tôi có một nhân viên:
val employee = Employee(Company(Seq(
Address(Street("aaa street")),
Address(Street("bbb street")),
Address(Street("bpp street")))))
Nó có 3 địa chỉ.
Và tôi muốn tận dụng các đường phố chỉ bắt đầu bằng "b". Mã của tôi là mớ hỗn độn như sau:
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
}
}))
}))
Nhân viên modified
là sau đó:
Employee(Company(List(
Address(Street(aaa street)),
Address(Street(Bbb street)),
Address(Street(Bpp street)))))
Tôi đang tìm kiếm một cách để cải thiện nó, và không thể tìm thấy một. Thậm chí đã thử Monocle nhưng không thể áp dụng cho sự cố này.
Có cách nào để cải thiện nó không?
PS: có hai yêu cầu quan trọng:
- sử dụng dữ liệu chỉ bất di bất dịch
- không bị mất các lĩnh vực khác hiện có
Cảm ơn rất nhiều !!! Điều đó thật tuyệt. Cuối cùng tôi đã có cơ hội để biết sức mạnh vô hình là thế nào! – Freewind
Câu trả lời hay, nhưng hãy xem tôi để biết cảnh báo (điều này sẽ biến đổi _any_ tên đường trong cấu trúc dữ liệu). –