Вы можете иметь другой Optional
внутри первого Optional
Optional o = Optional.of(catList)
.map(catList -> ...)
.orElse(Optional.of(dogList)
.map(dogList -> ...));
или другой метод, использующий Stream
, если вы можете сделать вызов к услуге достаточно универсальным
Или другой метод, использующий Stream#of
Он будет в основном проходить по обоим спискам, находить первый, который не равен нулю (но вы можете добавить другие условия к вашему фильтру, если хотите) и применять общий вызов к сервису.
Optional o = Stream.of(catList, dogList)
.filter(Objects::nonNull /*or other condition if you want*/)
.findFirst()
.map(list -> /*generic call to service*/);
И вызвать его таким образом
if (!o.isPresent()) return;