Πώς μπορώ να επεξεργαστώ τις συλλογές του παιδιού σε ένα αντίγραφο ενός Java `Immutables` αντιρρήσεις;

ψήφοι
2

Λαμβάνοντας υπόψη ένα @Value.Immutable-annotated κλάση που περιέχει μια συλλογή αμετάβλητα αντικείμενα, ποιος είναι ο πιο κομψός τρόπος για να δημιουργήσετε ένα νέο αντίγραφο, όπου τα αντικείμενα παιδικής τροποποιηθεί;

Για παράδειγμα, δίνεται μια εταιρεία με τους εργαζόμενους, αν θέλω να ορίσετε όλα τα ονόματα των εργαζομένων σε κεφαλαίο, είναι αυτή η σωστή προσέγγιση, ή είναι απλούστερη από εκεί;

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

Αυτό γίνεται αρκετά δυσανάγνωστο στο πραγματικό σενάριο κόσμο μου, όπου η ιδιότητα υπό επεξεργασία θάβεται τρία επίπεδα μακριά από το μητρικό κόμβο (η εταιρεία), έτσι είμαι απλά προσπαθώ να είμαι σίγουρη ότι δεν υπάρχει μια απλούστερη προσέγγιση που είμαι λείπει.

Δημοσιεύθηκε 27/11/2018 στις 17:45
πηγή χρήστη
Σε άλλες γλώσσες...                            

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