Объединить два потока объектов с webflux - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть два Flux

@Builder
@Data
class MyObj {
        private String id;
        private String name;
        private String description;
        private List<String> list;
        Boolean shouldSelect;
}

Flux<MyObj> flux1;
Flux<MyObj> flux2;

Я хотел бы объединить flux1 и flux2 так, чтобы:

  • , если существует одинаковое id в обоих - list из оба должны быть объединены. В этом случае имя и описание должны быть взяты из того, который имеет shouldSelect как истинное.

Вот то, что я имею до сих пор

        return flux1
                .concatWith(flux2)
                .groupBy(MyObj::getId)
                .flatMap(gf -> gf.reduce((a, b) -> {
                    List<String> combinedList = Stream.concat(a.getList().stream(), b.getList().stream()).collect(Collectors.toList());
                    MyObj obj = MyObj.builder()
                            .id(gf.key())
                            .name(a.getShouldSelect() ? a.getName() : b.getName())
                            .description(a.getShouldSelect() ? a.getDescription() : b.getDescription())
                            .list(combinedList)
                            .build();
                    return obj;
                }));

это, кажется, работает с минимальным тесты, которые я сделал до сих пор.

Есть ли лучший и более читаемый способ сделать это?

...