На самом деле это неправильный вопрос, и его необходимо продумать немного лучше.
Конечным результатом является то, что вы пытаетесь сопоставить ids
для views
с ids
для groups
и создайте объект соединения. Это не та цель, для которой предназначен Flux
API. В конце концов, похоже, что вы пытаетесь выполнить эту задачу с помощью двух циклов, что является очень неэффективным способом сделать это.
Намного лучше, если вы исследуете альтернативные подходы.
1) Если и group
, и view
и таблицы базы данных, тогда используйте SQL для соединения. Создайте новую эффективную конечную точку.
2) Поместите одну коллекцию на карту и используйте ее для объединения двух объектов.
@AllArgsConstructor
@Getter
class View {
Integer id;
String view;
}
@AllArgsConstructor
@Getter
class Group {
Integer id;
String group;
}
@Data
@AllArgsConstructor
class Combined {
String view;
String group;
}
private void run() {
Flux<View> views = Flux.just(new View(1, "v1"), new View(2, "v2"), new View(3, "v3"));
Flux<Group> groups = Flux.just(new Group(2, "g2"), new Group(3, "g3"), new Group(4, "g4"));
views.collectMap(View::getId)
.flatMapMany(viewMap -> groups.filter(group -> viewMap.containsKey(group.getId()))
.map(group ->
new Combined(viewMap.get(group.getId()).getView(), group.getGroup()))
)
.subscribe(System.out::println);
}