Как мне отредактировать дочерние коллекции в копии объекта Java `Immutables`?

Учитывая @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"));

Это становится довольно нечитаемым в моем реальном сценарии, где редактируемое свойство скрывается на трех уровнях от родительского узла (компании), поэтому я просто пытаюсь убедиться, что у меня нет более простого подхода, чем отсутствует.

0 ответов

Другие вопросы по тегам