Как обработать список моно один за другим? - PullRequest
0 голосов
/ 17 марта 2020

У меня есть список как

List<Tuple3<Object1, Mono<List<Object2>>, Mono<List<Object3>>>>

И мне нужно написать метод с подписью как

private Mono<Dto> buildDto(List<Tuple3<Object1, Mono<List<Object2>>, Mono<List<Object3>>>> tuples) {...}

Как я могу отслеживать все элементы списка tuples один за другим чтобы получить значения Object1, Object2, Object3, не пропуская ни одного из них?

Я пытался выполнить

AtomicReference<Dto> dtoAtomic = new AtomicReference<>(buildEmptyDto());
return tuples.stream()
         .map(tuple3 -> {
             return Mono.zip(tuple3.getT2(), tuple3.getT3(),
                             (object2, object3) -> {
                                 Dto dto = dtoAtomic.get();

                                 dtoAtomic.set(dto);
                                 return dto;
                             });
         })
         .collect(Collectors.toList())
         .stream()
         .findFirst()
         .orElse(Mono.just(dtoAtomic.get()))

Но есть только один Mono.zip (...) может быть получил, но мне нужно получить все кортежи.

1 Ответ

0 голосов
/ 24 марта 2020

Решено с помощью Flux.fromIterable(tuples)

...