从Flux转换为Mono

52

如何将包含1个元素的Flux转换为Mono?

Flux.fromArray(arrayOf(1,2,1,1,1,2))
                .distinct()
                .take(1)

我该如何将这个变为Mono(1)?

4个回答

98

可以使用next()替代take(1)

这将把Flux转换为一个有值的Mono,它会获取发出的第一个项目,或者如果Flux本身为空,则返回一个空的Mono


41

以下是列表:

  • Flux#single 适用于从Flux中取出一个元素的情况。例如:flux.take(1).single();

  • Flux#next 获取第一个元素。例如:flux.next();

  • Flux#last 获取最后一个元素。例如:flux.last();

  • Flux#singleOrEmpty 类似于 Optional。例如:flux.take(0).singleOrEmpty();

  • Flux#collect,它取决于使用情况。

  flux.collect(Collectors.reducing((i1, i2) -> i1))
      .map(op -> op.get());
  • 使用Flux#elementAt方法获取第i个元素,例如:flux.elementAt(1);

  • 使用Flux#shareNext方法获取第一个找到的元素,例如:flux.shareNext();

  • 使用Flux#reduce方法进行元素归约操作,例如:flux.reduce((i1, i2) -> i1);


  • 1

    或者,您可以在过滤后的Flux上使用single()


    1

    另外一个非常简单的方法是使用Mono.from()

    Mono<Integer> mono = Mono.from(flux);
    

    如果您的流有多个元素,则它将仅使用由流发出的第一个元素。

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接