Jak mogę wykonać funkcję na wartości mapy tylko wtedy, gdy jest obecna, bez wprowadzania żadnych zmian na mapie? Chcę to zrobić przy użyciu stylu deklaratywnego "Java 8", porównywalnego z Optional.ifPresent()
.Mapa funkcja ifPresent
Moje przypadek użycia jest następujący:
otrzymam aktualizacje (nowe lub usunięte) do obiektów w części, chcę zarejestrować się rodzica te aktualizacje. Dla księgowych Mam następujący:
Map<ParentId, Parent> parents = ...
Po otrzymaniu nowego dziecka I wykonaj następujące czynności:
parents.computeIfAbsent(child.getParentId(), k -> new Parent()).addChild(child));
Jednak do usuwania nie mogę znaleźć funkcję deklaratywny. Prosta chciałbym zaimplementować to jako:
if(parents.containsKey(child.getParentId())
{
parents.get(child.getParentId()).removeChild(child);
}
Albo mogę owinąć wartość w Optional
:
Optional.ofNullable(parents.get(child.getParentId()).ifPresent(p -> p.removeChild(child));
Należy zauważyć, że dominująca nie jest prosta lista, zawiera więcej niż tylko dzieci. Więc dodaje nie działa (bo removeChild()
nie zwraca Parent
):
parents.computeIfPresent(child.getParentId(), (k, v) -> v.removeChild());
Jak mogę to zrobić, czy nie istnieje odpowiednik Optional.ifPresent()
?
one sposobem z opcja jest chyba najprostszy podejście i najczystszych, może myśleć o – Lino
Co się dzieje, gdy rodzic kończy się bez dzieci? Czy chcesz usunąć tego rodzica z mapy, czy też jest to w porządku, jeśli rodzic nie ma dzieci? –
@FedericoPeraltaSchaffner Nic z tego przykładu (w moim przypadku, ponieważ istnieją również inne dane, które muszą zostać zapisane). – Thirler