Я использую Reactor 2.0.0.M1, и я пытаюсь отфильтровать Stream
. В зависимости от результатов моей логической операции я хочу либо продолжить с тем или иным потоком. Это представляется возможным с помощью функции otherwise()
, но не совсем понятно, как ее использовать.Каков правильный способ обработки фильтров Stream в Reactor 2.0?
Мой поток выглядит следующим образом:
stream.filter(o -> o.isValid());
Чтобы обработать случай, когда o.isValid()
верно, мое понимание, я могу просто позвонить .map()
продолжить вниз по течению.
Чтобы обработать случай, когда o.isValid()
является ложным, я могу получить доступ к альтернативному потоку .otherwise()
.
Но, похоже, не существует or()
или аналогичного метода, поэтому невозможно настроить оба потока в полностью текущем режиме.
Лучшее, что я могу придумать что-то вроде этого:
FilterAction<Object> filterAction = stream.filter(o -> o.isValid());
// Returns a 'true' Stream, which might additional operations
filterAction
.map(o -> trueOperation1(o))
.map(o -> trueOperation2(o));
// Returns a 'false' Stream, which might different additional operations
filterAction.otherwise()
.map(o -> falseOperation1(o))
.map(o -> falseOperation2(o));
Это действительно лучший способ, чтобы продолжить?
Это имеет смысл только в том случае, если остальная часть потока остается прежней. Что вы будете делать, когда поведение потока зависит от результата фильтра? – JBCP