Цепь с несколькими реакторами Monos

Я новичок в реактивном программировании и может случиться так, что этот вопрос легко разрешим или я делаю что-то совсем не так. Рассмотрим следующий интерфейс

interface NumbersOperator{fun apply(value:Double,value2:Double):Mono<Double>}

выполнение

class Plus(val name:String):NumbersOperator{
  fun apply(value:Double,value2:Double):Mono<Double>{
    return Mono.just(value+value2)    
}
}

На данный момент у меня есть список `

val plusOperators = listOf(Plus("first"), Plus("second"), Plus("third"))

` и способ, которым я комбинирую операторы, следующий

fun combine():Mono<Double>{
  val first=plusOperators.firstOrNull(it.name= = "first")
  val second=plusOperators.firstOrNull(it.name= = "second")
  val third=plusOperators.firstOrNull(it.name= = "third")

  return first.apply(1.0,1.0).map{it*1.0}.flatMap{second.apply(it,1.0)}.map{it*1.0}.flatMap{third.apply(it,1.0)}
 
}

На данный момент я могу жить с этим, но было бы намного проще и универсальнее, если бы я мог просто создать вышеуказанную цепочку из списка plusOperators. Обратите внимание, что это просто упрощение того, что я делаю, в основном мне нужно сопоставить результат предыдущего и вызвать другой моно и так далее.

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

Ответы 1

Ответ принят как подходящий

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

fun combine(): Mono<Double> {
    val plusOperators = listOf(Plus("first"), Plus("second"), Plus("third"))
    return plusOperators.fold(Mono.just(1.0)) { acc, op ->
        acc.flatMap { op.apply(it, 1.0) }
    }
}

замечательно, именно то, что я искал

mb2 27.11.2022 08:09

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