Реактивный поток пропускает фильтр по определенному исключению

Скажем, у меня есть такой реактивный поток:

Flux<App> apps = this.getApps(arg)
     .filter( res -> firstFilter())
     .filter( res -> secondFilter())

И скажем, что вызов getApps() возвращает UnsupportedOperationException. Как можно было пропустить firstFilter и вернуть хранилище по умолчанию для secondFilter, когда это исключение возникает без разрешения всей цепочки?

Обратите внимание, что UnsupportedOperationException должен быть единственным исключением, которое приводит к пропуску firstFilter.

Например, можно использовать onErrorReturn или onErrorResume для отката, но они завершат всю цепочку, и только onErrorResume сможет различать типы исключений.

Итак, вы имеете в виду, что хотите, чтобы когда getApps () генерировало исключение, чтобы продолжить работу с настраиваемым потоком, который вы хотите предоставить второму фильтру?

Boug 30.03.2021 01:43

имеет больше смысла, когда 1-й фильтр выдает исключение, но я не понял

Boug 30.03.2021 01:44

Ага! Скажем, что getApps () возвращает это конкретное исключение, я бы хотел иметь логику обработки ошибок, которая могла бы пропустить firstFilter, если это исключение возникнет, и предоставить значение по умолчанию для остальной части цепочки.

Chaos 30.03.2021 01:45
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
21
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
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 30.03.2021 02:00

@Chaos, если getApps () возвращает поток, он сначала будет передан на 1stFilter, а затем на 2ndFilter

Boug 30.03.2021 02:09

Ну, я чувствую себя тупым, не знаю, почему я просто не подумал об этом! Просто пытался решить это потоками.

Chaos 30.03.2021 02:13

Другие вопросы по теме