Как отредактировать дочерние коллекции в копии объекта Java `Immutables`? - PullRequest
0 голосов
/ 27 ноября 2018

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...