Wie kann ich Kind Sammlungen in einer Kopie eines Java bearbeiten `Immutables` Objekt?

stimmen
2

Bei einer @Value.Immutable-annotated Klasse , die eine Sammlung von unveränderlichen Objekten enthält, was ist die eleganteste Art und Weise eine neue Kopie zu erstellen, in dem die untergeordneten Objekte geändert werden?

Um zum Beispiel ein Unternehmen mit Mitarbeitern gegeben, wenn ich alle Mitarbeiternamen festlegen möchten, in Großbuchstaben, dann ist dies der richtige Ansatz, oder gibt es eine einfachere?

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));

Dies wird ziemlich unleserlich in meinem realen Szenario, in dem die unbewegliche bearbeiteten drei Ebenen weg von den übergeordneten Knoten begraben wird (das Unternehmen), so dass ich versuche nur, um sicherzustellen, dass ich es nicht ein einfacher Ansatz ist, dass ich fehlt.

Veröffentlicht am 27/11/2018 um 17:45
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

Wie kann ich Kind Sammlungen in einer Kopie eines Java bearbeiten `Immutables` Objekt?

stimmen
2

Bei einer @Value.Immutable-annotated Klasse , die eine Sammlung von unveränderlichen Objekten enthält, was ist die eleganteste Art und Weise eine neue Kopie zu erstellen, in dem die untergeordneten Objekte geändert werden?

Um zum Beispiel ein Unternehmen mit Mitarbeitern gegeben, wenn ich alle Mitarbeiternamen festlegen möchten, in Großbuchstaben, dann ist dies der richtige Ansatz, oder gibt es eine einfachere?

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"));

Dies wird ziemlich unleserlich in meinem realen Szenario, in dem die unbewegliche bearbeiteten drei Ebenen weg von den übergeordneten Knoten begraben wird (das Unternehmen), so dass ich versuche nur, um sicherzustellen, dass ich es nicht ein einfacher Ansatz ist, dass ich fehlt.

Beantwortet am 27/11/2018 um 17:45
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more