使用BiFunction <t,t,=“,mono <t =”“ >>来简化List <t>

时间:2018-09-06 09:04:49

标签: java mono reactive-programming project-reactor

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

1 个答案:

答案 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文档

enter image description here