我有List<T>
,我需要使用BiFunction<R, T, Mono<R>>
聚合器来减少它。
所以我需要链接那些单声道(Mono<R>
)
如何使用Project Reactor做到这一点?
更新:
例如,我有一个包含item1,item2等的列表。
我有一个函数Mono<R> reduce(T item, R acc)
我需要这样的内容:reduce(item1, startAcc).flatMap(acc -> reduce(item2, acc)).flatMap(acc -> reduce(item3, acc))
等
我可以使用递归来实现,但是如果列表足够长,则会出现StackOverflowError
答案 0 :(得分:0)
您应该只使用Flux上可用的 reduce方法。下面的示例代码:
public void reduceTest() {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
Flux<Integer> numberFlux = Flux.fromIterable(numbers);
Double initial = 2.5;
BiFunction<Double, Integer, Double> multiply = (doubleNumber, numberInt) -> doubleNumber * numberInt;
Mono<Double> floatResult = numberFlux.reduce(initial, multiply);
floatResult.subscribe(System.out::println);
}
请参阅https://projectreactor.io/docs/core/release/api/index.html?reactor/core/publisher/Mono.html的Java文档