Прежде всего - вы не пользуетесь функцией потоковой передачи, вы разделили ее на два отдельных шага - загрузка данных, и когда она будет завершена - их преобразование. Вы можете объединить его в один конвейер. Во-вторых, выброс исключений не является функциональным способом. Вы должны использовать какой-то тип для возврата состояния, например, с некоторой реализацией Try.
final class Try<T> {
private final Exception e;
private final T t;
public Try(Exception e) {
this.e = e;
t = null;
}
public Try(T t) {
this.t = t;
e = null;
}
public Exception getE() {
return e;
}
public T getT() {
return t;
}
}
, а сам код может выглядеть примерно так:
public Try<Sort> resolveArgument() {
int cnt = getCount();
return cnt == 0 ? Sort.by(Sort.Direction.DESC, defaultSortParam) : someErrorHandlingLogic(cnt);
}
private static void getCount() {
sort.stream().map(Sort.Order::getProperty)
.filter(property -> !allowedSortParams.contains(property))
.count();
}
Если вас интересует функциональное программирование парадигма в java - рекомендую отличную презентацию https://dev.tube/video/YnzisJh-ZNI