Wie kann ich eine Funktion auf einen Wert einer Karte nur ausführen, wenn sie vorhanden ist, ohne Änderungen an der Karte vorzunehmen? Ich möchte dies mit dem 'Java 8' deklarativen Stil, vergleichbar mit Optional.ifPresent()
.Karte ifPresent Funktion
Mein Anwendungsfall ist wie folgt:
I erhalten Updates (neue oder gelöschte) auf Objekte teilweise ich diese Updates mit ihren Eltern registrieren möchten. Für Buchhaltung habe ich folgendes:
Map<ParentId, Parent> parents = ...
Wenn ein neues Kind Empfangen ich folgendes tun:
parents.computeIfAbsent(child.getParentId(), k -> new Parent()).addChild(child));
jedoch zum Entfernen ich nicht die deklarative Funktion finden. Geradlinig würde ich dies umzusetzen, wie:
if(parents.containsKey(child.getParentId())
{
parents.get(child.getParentId()).removeChild(child);
}
Oder ich könnte den Wert in einer Optional
wickeln:
Optional.ofNullable(parents.get(child.getParentId()).ifPresent(p -> p.removeChild(child));
Beachten Sie, dass Eltern nicht eine einfache Liste ist, enthält es mehr als nur Kinder. So ist die folgende nicht funktioniert (weil removeChild()
nicht zurück ein Parent
):
parents.computeIfPresent(child.getParentId(), (k, v) -> v.removeChild());
Wie kann ich dies tun, oder gibt es kein Äquivalent zu Optional.ifPresent()
?
Sie Art und Weise mit optional ist wahrscheinlich der einfachste Ansatz und die sauberste i Denken Sie an – Lino
Was passiert, wenn der Elternteil ohne Kinder endet? Müssen Sie dieses Elternteil ebenfalls aus der Karte entfernen, oder ist es in Ordnung, wenn das Elternteil ohne Kinder bleibt? –
@FedericoPeraltaSchaffner Nichts für dieses Beispiel (in meinem Fall, da auch noch andere Daten gespeichert werden müssen). – Thirler