Einige eingebettete Fall-Klassen und das Feld addresses
ist ein Seq[Address]
:Wie ändert man diese geschachtelten Fall-Klassen mit "Seq" -Feldern?
// ... means other fields
case class Street(name: String, ...)
case class Address(street: Street, ...)
case class Company(addresses: Seq[Address], ...)
case class Employee(company: Company, ...)
ich einen Mitarbeiter haben:
val employee = Employee(Company(Seq(
Address(Street("aaa street")),
Address(Street("bbb street")),
Address(Street("bpp street")))))
Es verfügt über 3 Adressen.
Und ich möchte, dass die Straßen mit „b“ nur beginnen zu nutzen. Mein Code ist Chaos wie folgt vor:
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
}
}))
}))
Der modified
Mitarbeiter ist dann:
Employee(Company(List(
Address(Street(aaa street)),
Address(Street(Bbb street)),
Address(Street(Bpp street)))))
ich nach einem Weg, um es zu verbessern, und nicht finden können. Selbst versucht Monocle, kann es aber nicht auf dieses Problem anwenden.
Gibt es eine Möglichkeit, es besser zu machen?
PS: Es gibt zwei wesentliche Anforderungen:
- Verwendung nur unveränderlichen Daten
- verlieren nicht den anderen bestehenden Feldern
Dank tun könnte !!! Das ist echt cool. Ich habe endlich eine Chance zu wissen, wie kraftvoll formlos ist! – Freewind
Schöne Antwort, aber sehen Sie meine für eine Warnung (dies wird _any_ Straße Namen in der Datenstruktur transformieren). –