我有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

最佳答案

您应该只使用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文档。

java - 使用BiFunction &lt;T,T,Mono &lt;T &gt;&gt;简化List &lt;T&gt;-LMLPHP

09-10 08:54
查看更多