假设我有一个由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
周围引入某种“边界”。这可以通过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))
);
注意:我假设你不能出于某种原因将不同的地图功能合并在一起,比如简化代码片段