如何在反应器中保留所有后续阶段的转换结果

How to keep transformation result for all subsequent stages in reactor

假设我有一个包含 4 个阶段的 Reactor 流:

Mono.just(event)
.map(this::map1)
.map(this::map2)
.map(this::map3)
.map(this::map4)

我希望 this::map1 的结果可以通过 this::map2, this::map3 and this::map4 个阶段访问。 有什么简单的方法可以用 Reactor 做到这一点吗?

我会将您的 map1、map2、map3 和 map4 合并到一个 map 函数中,因为这 4 个函数相互依赖

但是如果您坚持使用 4 个单独的函数,您可以使用 tuple 沿反应流传递上下文,例如:

private Tuple2<String, HashMap> map3(Tuple2<String, HashMap> inputTuple) {
        String input = inputTuple.getT1();
        HashMap context = inputTuple.getT2();
        // mapping example
        String result = input + context.get("result1") +  "mappingExample";
        context.put("result3", result);
        return Tuples.of(result, context);
    }

或者只是一个包含所有结果的简单地图,例如:

private HashMap<String, String> map3(HashMap<String, String> input) {
    String result3 = input.get("result2") + input.get("result1");
    input.put("result3", result3);
    return input;
}

我认为解决这个问题的最简单方法是考虑在 map1 周围引入某种 "boundary"。这可以通过 flatMap:

来实现
Mono.just(event)
    .map(this::map1)
    .flatMap(v1 -> Mono.just(v1)
        .map(v2 -> map2(v2, v1))
        .map(v3 -> map3(v3, v1))
        .map(v4 -> map4(v4, v1))
    );

注意:我假设您出于某种原因无法将不同的地图功能合并在一起,例如简化代码段