Скажем, у меня есть такой реактивный поток:
Flux<App> apps = this.getApps(arg)
.filter( res -> firstFilter())
.filter( res -> secondFilter())
И скажем, что вызов getApps() возвращает UnsupportedOperationException. Как можно было пропустить firstFilter и вернуть хранилище по умолчанию для secondFilter, когда это исключение возникает без разрешения всей цепочки?
Обратите внимание, что UnsupportedOperationException должен быть единственным исключением, которое приводит к пропуску firstFilter.
Например, можно использовать onErrorReturn или onErrorResume для отката, но они завершат всю цепочку, и только onErrorResume сможет различать типы исключений.
имеет больше смысла, когда 1-й фильтр выдает исключение, но я не понял
Ага! Скажем, что getApps () возвращает это конкретное исключение, я бы хотел иметь логику обработки ошибок, которая могла бы пропустить firstFilter, если это исключение возникнет, и предоставить значение по умолчанию для остальной части цепочки.




Stream<> stream = null; //your type here
try{
stream = this.getApps(arg).filter( res -> firstFilter());
}catch (UnsupportedOperationException ex) {
stream = Stream.of("1","2","3"); // you default provided stream of strings for example
}finally {
stream.filter( res -> secondFilter())
}
Сработает ли это, если getApps () вернет монопоток? Поскольку исключение будет немедленно вызвано?
@Chaos, если getApps () возвращает поток, он сначала будет передан на 1stFilter, а затем на 2ndFilter
Ну, я чувствую себя тупым, не знаю, почему я просто не подумал об этом! Просто пытался решить это потоками.
Итак, вы имеете в виду, что хотите, чтобы когда getApps () генерировало исключение, чтобы продолжить работу с настраиваемым потоком, который вы хотите предоставить второму фильтру?