Niektóre zagnieżdżone klasy przypadków i pole addresses
jest Seq[Address]
:Jak zmodyfikować te zagnieżdżone klasy przypadków za pomocą pól "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, ...)
mam pracownika:
val employee = Employee(Company(Seq(
Address(Street("aaa street")),
Address(Street("bbb street")),
Address(Street("bpp street")))))
Posiada 3 adresy.
I chcę zacząć na wielką skalę na ulicach zaczynając od "b". Mój kod jest bałagan jak następuje:
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
pracownik jest wówczas:
Employee(Company(List(
Address(Street(aaa street)),
Address(Street(Bbb street)),
Address(Street(Bpp street)))))
Szukam sposobu, aby go poprawić, a nie może znaleźć. Nawet próbował Monocle, ale nie może zastosować go do tego problemu.
Czy jest jakiś sposób, aby to poprawić?
PS: istnieją dwa podstawowe wymagania:
- wykorzystanie danych tylko niezmienne
- nie stracić innych istniejących pól
Dziękuję bardzo !!! To jest naprawdę fajne. W końcu miałem szansę dowiedzieć się, jak potężny jest bezkształtny! – Freewind
Dobra odpowiedź, ale zobacz moje ostrzeżenie (to zmieni nazwy ulic w strukturze danych). –