首页 > 解决方案 > Spring & Reactor:使用来自 repo 的 Flux 订阅两个参数的二进制函数

问题描述

假设我有一个具有以下定义的二元函数:

Mono<ObjectA> someBinaryFunction(String someString, enum someEnum)

我想在一些操作后使用来自 Spring 存储库的通量来订阅这个函数:

    repo.findAll()
            .filter( item -> itemField < someValue)
            .flatMapSequential( item ->
              Flux.just(item.getValue1(), enum.ENUMVALUE)
              ).subscribe(baseClass::someBinaryFunction)

如何实现这一点,使用 Flux 订阅具有 N 个参数的函数的最佳实践是什么?我的第一个直觉是像上面那样使用sequentialFlatMap,但这失败了。

标签: springbinaryfluxsubscribereactor

解决方案


如果最初的意图是将项目的通量转换为 (item, enumVal) 等对的通量,则解决方案可能如下:

repo.findAll()
        .filter( item -> itemField < someValue)
        .flatMapSequential( item ->
          Flux.just(Tuples.of(item.getValue1(), enum.ENUMVALUE))
          ).subscribe(tuple->baseClass.someBinaryFunction(tuple.getT1(), tuple.getT2()))

Tuples.of (...)方法创建Tuple2<ItemType, EnumType>类型对,然后tuple.getT1()tuple.getT2()提取这对的第一个和第二个成员,以用作someBinaryFunction()参数。


推荐阅读