Уменьшить список <T>, используя BiFunction <T, T, Mono <T>> - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть List<T>, мне нужно уменьшить его, используя BiFunction<R, T, Mono<R>> агрегатор.

Так что мне нужно связать эти моно (Mono<R>) Как это можно сделать с помощью проектного реактора?

UPDATE: Например, у меня есть список с 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 голосов
/ 20 сентября 2018

Вы должны просто использовать метод уменьшения, доступный на Flux . Пример кода ниже:

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

}

Пожалуйста, обратитесь к документации Java на https://projectreactor.io/docs/core/release/api/index.html?reactor/core/publisher/Mono.html

enter image description here

...