Ignorowanie parametru z Consumer

0

Nie bardzo wiem jak miałbym opisać moje pytanie więc posłuże się przykładem. Mamy np. metodę która pobiera użytkownikaz bazy i zwraca Optional:

    Optional<User> getById(String id);

I teraz chciałbym pobrać użytkownika z bazy na podstawie np. ID, a jeśli taki istnieje to chciałbym wykonać jakąś akcje niezwiązaną z tym obiektem. Mogę wówczas zrobić w ten sposób:

   if (repository.getById(id).isPresent()) {
          doSomething()
   }

ale jest to jak wiadomo bardzo słabe rozwiązanie. Innym może być takie:

   repository.getById(id).ifPresent(user -> doSomething());

I to jest niby lepsze ale z drugiej strony parametr usera jest tu ignorowany. Czy w waszym kodzie jest to do przyjęcia czy raczej świadczy to o jakichś błędach w logice?

EDIT:
Tak sobie trochę pogooglowałem i wysło na to że coś takiego zadziała:

   repository.getById(id).ifPresent(__-> doSomething());

Osobiście sie z tym w kodzie nie spotkałem więc w sumie nie mam zdania na ile to jest poprawne podejście chociaz w Kotlinie też jest podobne rozwiązanie z tym że uzywany jest pojedynczy znak.

1

W tym przypadku co podałeś to prędzej bym zrobił metodę na bazie:

boolean exists(String userId);

W innych przypadkach to trudno powiedzieć, skłaniałbym się raczej do tego, że coś jest nie tak.

3

Takie ignorowanie jest zupełnie normalne.
Im bardziej skręcasz w stronę "pure code" tym częsciej się pojawia. (Szczególnie w miejscach gdzie funkcyjnie zapisujemy kod imperatywny).

Samego ifPresent nie lubię (bo to void) ale nieważne w co opakujesz i tak problem tych ignorowanych parametrów pozostanie.

0

Samego ifPresent nie lubię (bo to void)

Że lepszy byłby jakiś peek zwracający ten sam obiekt?

1 użytkowników online, w tym zalogowanych: 0, gości: 1