У меня есть два 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;
}));
это, кажется, работает с минимальным тесты, которые я сделал до сих пор.
Есть ли лучший и более читаемый способ сделать это?