37

如何从具有 1 个元素的 Flux 转换为 Mono?

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

如何使它成为 Mono(1)?

4

3 回答 3

78

而不是take(1),您可以使用next().

这将通过获取第一个发射的项目将其转换Flux为一个值Mono,如果 Flux 本身为空,则将其转换为一个空的 Mono。

于 2017-02-03T11:32:56.153 回答
23

这是一个列表:

  • 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);

于 2020-05-07T12:31:25.197 回答
1

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

于 2019-12-18T04:34:04.847 回答