Как сделать операцию «подобрать случай» в реакторе - PullRequest
0 голосов
/ 19 марта 2019

Я создаю несогласного бота, которому нужно прочитать список аргументов, и с первым заданным аргументом заставить его определить, какую ветку запустить.

Что-то вроде этого.

Mono.just(stringList)
.ifSelectmap(conditional1, branch1)
.ifSelectmap(conditional2, branch2)
.ifSelectmap(conditional3, branch3)
// non branch logic here

Единственный способ найти что-либо подобное - просто вызвать несколько глубоко вложенных операторов switchIfEmpty.Которым было бы трудно управлять.

1 Ответ

0 голосов
/ 21 марта 2019

если условная логика не включает в себя операции с большими задержками (т. Е. Выполнение ввода-вывода), то нет ничего плохого в передаче более детализированного Function в map / flatMap. Я собираюсь предположить, что ваши "ветви" на самом деле являются асинхронными операциями, представленными как Mono<R> или Flux<R> (то есть все ветви имеют одинаковый тип возврата R), поэтому мы говорим flatMap:

Flux<V> source; //...
Flux<R> result = source.flatMap(v -> {
    if (conditional1) return branch1(v);
    if (conditional2) return branch2(v);
    if (conditional3) return branch3(v);
    return Mono.empty(); //no conditional match == ignore
    //you might want a default processing instead for the above
};
...