代码之家  ›  专栏  ›  技术社区  ›  evgeniy44

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

  •  0
  • evgeniy44  · 技术社区  · 6 年前

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

    我要你的结果 this::map1 this::map2, this::map3 and this::map4 阶段。

    2 回复  |  直到 6 年前
        1
  •  0
  •   Camille Vienot    6 年前

    但是如果坚持使用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;
    }
    
        2
  •  1
  •   Simon Baslé    6 年前

    我认为解决这个问题最简单的方法就是考虑你需要在周围引入某种“边界” 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))
        );
    

    注意:我假设你不能将不同的映射函数合并在一起是因为某些原因,比如代码片段的简化