【问题标题】:Inspect a Flux stream by an operator由操作员检查通量流
【发布时间】:2019-12-16 08:59:50
【问题描述】:

我尝试检查现有流,但目前找不到特殊运算符。

Flux.just(1, 2, 3)
    // just inspect every element
    .map(e -> {
        System.out.println(e);
        return e;
    })
    .subscribe();

我正在寻找像 Java Streams 中的 peek() 或 RxJS 中的 tap() 这样的运算符。

【问题讨论】:

  • 看来take()all() 操作可以提供帮助
  • 似乎doOnNext(System.out::println) 可以正常工作。 :)

标签: java project-reactor


【解决方案1】:

正如您评论的那样,doOnNext(System.out::println) 将只打印每个元素,这对于简单的用例可能就足够了。 (一般来说,doOnNext() 用于表示副作用,所以在这个意义上等同于tap()。)

但是,如果调试是您的主要目的,您可能还想查看log(),它会为您提供更多有用的信息(例如通知您订阅、请求等以及每个元素,以及它们如何联系在一起。)例如:

Flux.just(1, 2, 3)
        .log()
        .subscribe();

打印:

[ INFO] (main) | onSubscribe([Synchronous Fuseable] FluxArray.ArraySubscription)
[ INFO] (main) | request(unbounded)
[ INFO] (main) | onNext(1)
[ INFO] (main) | onNext(2)
[ INFO] (main) | onNext(3)
[ INFO] (main) | onComplete()

【讨论】:

  • 完美。谢谢。当您知道解决方案时,这就是如此简单。
猜你喜欢
  • 2017-01-07
  • 2023-01-08
  • 1970-01-01
  • 2020-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多