假设我有一个Reactor流,该流包含4个阶段:
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有什么简单的方法吗?
答案 0 :(得分:1)
我认为解决此问题的最简单方法是考虑到您需要在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))
);
NB:我认为您由于某种原因无法将不同的地图函数合并在一起,例如代码段的简化
答案 1 :(得分:0)
我将把您的map1,map2,map3和map4合并到一个map函数中,因为这四个函数相互依赖
但是,如果您坚持使用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;
}