いくつかのネストされたケースクラスとフィールドaddresses
はSeq[Address]
です:"Seq"フィールドでこのネストされたケースクラスを変更するにはどうすればいいですか?
val employee = Employee(Company(Seq(
Address(Street("aaa street")),
Address(Street("bbb street")),
Address(Street("bpp street")))))
それは3つのアドレスを持っている:
// ... means other fields
case class Street(name: String, ...)
case class Address(street: Street, ...)
case class Company(addresses: Seq[Address], ...)
case class Employee(company: Company, ...)
私は従業員を持っています。
そして、私は通りを「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:二つの重要な要件があります。
- 使用のみ不変データは
- あなたが
addresses
での交換に開いている場合は、他の既存のフィールド
のように本当にありがとうございましたが、それを行うことができます!かっこいい。私は最終的にどのように強力な形がないのかを知る機会を得ました! – Freewind
良い答えですが、私の警告を見てください(これはデータ構造の_any_通り名を変換します)。 –