有没有办法在Flux中打印出所有操作链?

时间:2018-01-22 05:42:25

标签: spring reactive-programming project-reactor reactive-streams

鉴于来自项目反应堆的FluxMono,有一种方法可以让Flux或Mono打印出运营商链的样子。例如,给出下面的代码。

Fulx flux = Flux.just("a","b","c")
              .map( v -> v.toUpperCase())
              .log();

有没有办法让助焊剂打印出处理管道中链接的所有运算符的列表?一些漂亮的ascii格式文本或大理石图?

printTheFlux(flux)应该是一个很好的打印输出,显示上面例子中所有操作符的结构。我不希望在lambda中生成代码只是一种方法来查看操作符链接在一起。

2 个答案:

答案 0 :(得分:0)

很好的建议!

然而,等待它,我们可以有类似的东西:

shuffle(a_list_of_b_values)

for i in range(240):
    if df.loc[i,'SorD'] == 'S':
        df.loc[i,'N'] = 24
        df.loc[i,'Size'] = 24
        df.loc[i,'Space'] = 24  

    elif d.loc[i, 'SorD'] == 'D':       
        data = a_list_of_b_values.pop()         
        df.loc[i,'N'] = data['N']
        df.loc[i,'Size'] = data['Size']
        df.loc[i,'Space'] = data['Space']

Disposable flux = Flux.just("a", "b", "c") .map(String::toUpperCase) .doOnNext(FluxUtil::print) .subscribe(); 只是一种静态方法,您可以用不同的方式编写。

以下是完整代码适用于我:

FluxUtil::print

答案 1 :(得分:0)

使用Scannable界面执行此操作有部分构建块:

public String textRepresentation(Flux<?> flux) {
    Scannable sc = Scannable.from(flux);
    //scan the last operator in the chain and ask if it knows its parents
    List<String> names = sc.parents().map(Scannable::operatorName)
                                     .collect(Collectors.toList());
    //as it traverses the chain from bottom to top, we need to reverse the order
    Collections.reverse(names);
    //need to also add the last operator
    names.add(sc.operatorName());
    return names.toString();
}

@Test
public void textRepresentationTest() {
    Flux flux = Flux.just("a","b","c")
                    .map( v -> v.toUpperCase())
                    .log();

    System.out.println(textRepresentation(flux));
}

打印

[map, log]

并非所有运营商都完全支持它(如您所见,just来源并非如此)。