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 个参数的函数的最佳实践是什么?我的第一个直觉是使用上面的序列平面映射,但失败了。

解决方法

如果最初的意图是将项目的 Flux 转换为像 (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(...) 方法创建类型对 Tuple2tuple.getT1() strong> 和 tuple.getT2() 提取该对的第 1 和第 2 个成员,以用作 someBinaryFunction() 参数。