Учитывая @Value.Immutable
-аннотированный класс, который содержит коллекцию неизменяемых объектов, каков самый элегантный способ создания новой копии, где дочерние объекты модифицируются?
Например, учитывая компаниюс сотрудниками, если я хочу установить имена всех сотрудников в верхний регистр, это правильный подход или есть более простой?
Company c1 = ImmutableCompany.builder()
.name("ACME")
.addEmployees(
ImmutableEmployee.builder().name("William Shakespeare").build(),
ImmutableEmployee.builder().name("T.S. Eliot").build()
)
.build();
Company c2 = ImmutableCompany.copyOf(c1).withEmployees(
c1.employees().stream().map(employee ->
ImmutableEmployee.copyOf(employee).withName(employee.name().toUpperCase())).collect(Collectors.toList())
);
assertThat(c2.employees().get(0).name(), equalTo("WILLIAM SHAKESPEARE"));
assertThat(c2.employees().get(1).name(), equalTo("T.S. ELIOT"));
Это становится довольно нечитаемым в моем реальном сценарии, где свойстворедактирование скрыто на трех уровнях от родительского узла (компании), поэтому я просто пытаюсь убедиться, что не существует более простого подхода, который мне не хватает.