Наборы пружинных реакторов Наборы из набора - PullRequest
1 голос
/ 31 октября 2019

Я пытаюсь выяснить, как получить Mono<Set<Customer>> от Flux<Order>.

Учитывая, что Order содержит Set<Customer>

Я пытался прочитать все, и вот самое близкое, что я могу получить, но он все равно не будет компилироваться. Может кто-нибудь предложить руку, пожалуйста. В следующем примере orderService.getAll (orderCriteria) возвращает Flux<Order>

final Mono<Set<Customer>> customerSetMono = orderService
              .getAll(orderCriteria)
              .map(order -> order.getCustomers())
              .collect(Collectors.toSet()) //Mono<Set<Set<Customer>>
              .flatMap(
                  customerSet -> customerSet.stream()
                      .flatMap(customers -> customers.stream()))
              .collect(Collectors.toSet());

1 Ответ

1 голос
/ 31 октября 2019

Вы столкнулись с list в сценарии list, но в реактивном контексте. Итак, все, что вам нужно сделать, это использовать правильный вариант flatMap. Вот как должен выглядеть ваш код

orderService.getAll(orderCriteria) // Flux<Order>
        .flatMapIterable(Order::getCustomers) // Flux<Customer>
        .collect(Collectors.toSet()); // Mono<Set<Customer>>
...