我想从通量转换为单声道。但是,我无法决定何时使用single()
或next()
,也不知道哪一个更有效?
Flux<String> optionalIdsFlux = Flux
.fromIterable(result.getPersonalizationEntity())
.filter(i -> i.getKey().equals(PERSONALIZATION_KEY))
.next() // or single() ??
.map(DataEntity::getValue)
.flatMapMany(Flux::fromIterable);`
它们实际上是完全不同的。 next()
采用发出的第一个值,然后取消订阅。
另一方面,single()
期望首先只发射一个元素。如果不是这种情况,并且发出零个或多个元素,则会发出错误信号。
选择哪一个取决于您的使用案例。如果保证源只发出一个元素,则可以使用 single()
.否则使用 next()
。
除了a better oliver
所说的之外,如果有一个超级强的保证,即你所拥有的Publisher
最多只发出一次onNext
,你可以通过使用Mono.fromDirect(Publisher)
把它变成一个Mono
- 没有系安全带。