Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何保持反应器所有后续阶段的转换结果_Java_Spring_Reactive Programming_Project Reactor - Fatal编程技术网

Java 如何保持反应器所有后续阶段的转换结果

Java 如何保持反应器所有后续阶段的转换结果,java,spring,reactive-programming,project-reactor,Java,Spring,Reactive Programming,Project Reactor,假设我有一个由4个阶段组成的反应器流: Mono.just(event) .map(this::map1) .map(this::map2) .map(this::map3) .map(this::map4) 我希望this::map1的结果可以通过this::map2、this::map3和this::map4阶段访问。 使用Reactor有什么简单的方法可以做到这一点吗?我将把map1、map2、map3和map4合并到一个map函数中,因为这4个函数相互依赖 但是,如果您坚持使用4个独立

假设我有一个由4个阶段组成的反应器流:

Mono.just(event)
.map(this::map1)
.map(this::map2)
.map(this::map3)
.map(this::map4)
我希望
this::map1
的结果可以通过
this::map2、this::map3和this::map4
阶段访问。
使用Reactor有什么简单的方法可以做到这一点吗?

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

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

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 Tuple2-map3(Tuple2-input-uple){
字符串输入=inputUple.getT1();
HashMap context=inputUple.getT2();
//映射示例
String result=input+context.get(“result1”)+“mappingExample”;
context.put(“result3”,result);
返回元组。of(结果、上下文);
}
或者只是保存所有结果的简单地图,例如:

private HashMap<String, String> map3(HashMap<String, String> input) {
    String result3 = input.get("result2") + input.get("result1");
    input.put("result3", result3);
    return input;
}
私有HashMap映射3(HashMap输入){
字符串result3=input.get(“result2”)+input.get(“result1”);
输入。输入(“结果3”,结果3);
返回输入;
}

我认为解决这个问题的最简单方法是考虑在
map1
周围引入某种“边界”。这可以通过
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))
    );

注意:我假设您由于某种原因无法将不同的映射函数合并在一起,比如代码片段的简化

您检查了Reactor中的功能了吗?这可能会帮助您将以前的步骤中的信息转换为将来的步骤。@EdwinDalorzo,是的,我检查过了,但我找不到用转换结果填充上下文的方法。我发现的唯一方法是用静态数据(例如某个常量)填充它@EdwinDalorzo怎么会这样?