How to return empty when reducing a flux

时间:2018-02-03 10:46:12

标签: project-reactor

Given this simplified sample code:

Flux.empty()
  .cast(Integer.class)
  .reduce(Integer.valueOf(1), (i,j) -> i+j)
  .subscribe(System.out::println);

How to achieve that the result of the reduce operation is also empty?

1 个答案:

答案 0 :(得分:1)

您不能使用此特定变体。 Integer.valueOf(1)的目的的一半是提供种子,即使源是空的,也能确保有值。

但是,您可以在没有种子/种子供应商的情况下使用变体:

Flux.empty()
  .cast(Integer.class)
  .reduce((i,j) -> i+j)
  .subscribe(System.out::println);

空序列或单值序列将按原样再现(javadoc可能有点不清楚),所以:

  • 上面的代码会生成一个空的Mono
  • Flux.empty().cast(Integer.class)替换为Flux.just(1)会产生Mono 1。{/ li>
  • 替换为Flux.just(3, 4)会产生Mono 7