реактор java Как добавить Моно в Моно<Список>

#java #reactive-programming #project-reactor

Вопрос:

Я новичок в проекте реактор. У меня есть вопрос, как добавить Моно в Моно<Список>?(Я знаю, что могу использовать метод Mono.block для получения строки из Mono, но я хочу научиться правильному реактивному способу, поэтому Mono.block не принимается.)

 import java.util.ArrayList;
import java.util.List;
import reactor.core.publisher.Mono;

public class Classroom {

    private Mono<List<String>> classroom = Mono.just(new ArrayList<String>());
    
    public void addStudent(Mono<String> student) {
        //add the Mono<String> student to Mono<List<String>> classroom
    }
}
 

Ответ №1:

Вы можете использовать оператор mergeWith() для слияния Mono<String> с Mono<List<String> :

 public static void addStudent(Mono<String> student) {
    classroom = classroom.flatMapMany(Flux::fromIterable).mergeWith(student).collectList();
}
 

Комментарии:

1. Спасибо за ваш ответ. Но я получил эту ошибку компиляции » Карта метода(функция супер Струна,? расширяет R>) в типе Mono><Строка> не применяется для аргументов (Список::из)» @Lefteris

2. Это работает на меня. Какую версию Java вы используете? Оставьте свой код, пожалуйста.

3. jdk8, <Идентификатор группы>org.springframework.boot<Идентификатор группы></Идентификатор группы> </Идентификатор группы><Идентификатор группы> < идентификатор группы > < идентификатор группы > < идентификатор начальной загрузки-родитель<идентификатор></Идентификатор> </Идентификатор><версия>2.5.4<версия></версия>

4. List::of введено в JDK 9. Я отредактировал свой ответ для JDK 8.

5. Спасибо, в методе addStudent я хочу добавить Моно<Строку> в свойство класса, public void addStudent(Моно<Строка><Строка> ученик) { //this.classroom.add(ученик); //если не Моно тип }