Celowo w fetchUsersWithRole dałem zwracanie przez referencje, więc either odpada.
Nie masz możliwości zmiany tego? Mutowanie listy poprzez przekazywanie referencji do niej to proszenie się o bugi. Tak napisany kod jest ciężki w czytaniu, a o rozumowaniu o nim już nie wspominając. W takim przypadku nigdy nie wiesz która metoda co zrobi z daną kolekcją i co się stanie.
Poza tym wcześniej czy później zawartość either musi trafić do map więc musiałbym dodać checka czyli sprowadza się to do rozwiazania ze zwróceniem pustej listy.
Tak, dokładnie o to w tym przypadku rozbija się Either
. W momencie, gdy już musisz coś z nim zrobić to używasz sobie np. fold
i obsługujesz przypadki zarówno dla lewej jak i prawej strony. Logika jest przejrzysta i ładnie odseparowana pomiędzy "błędem", a normalnym przebiegiem programu.
Względem checka z pustą listą różnica jest taka, że obsługę błędu zostawiasz użytkownikowi metody.
W aktualnej funkcjonalności jakikolwiek błąd możesz zamienić na pustą listę. W innym przypadku, błąd tej metody mógłby powodować, że nie ma sensu kontynuować dalszego przebiegu funkcjonalności. Jeszcze w innym przypadku, niektóre błędy (pusta lista, lista która nie spełnia określonych warunków) mogłaby powodować zakończenie flow, a inne błędy nie. Either
daje łatwą możliwość obsługiwania tych samych błędów w różny sposób, w zależności od miejsca użycia