Работает следующий фрагмент кода:
// emitting employees...
.flatMap(employee -> {
boolean isAlive = employee.isAlive();
return Mono.just(isAlive)
.flatMap(myBoolean -> {
if (myBoolean) {
return Mono.empty();
}
else {
return Mono.just(employee);
}
});
})
Но мне было интересно, почему я не могу использовать .map
при обработке myBoolean
(исключение NullPointerException, когда возвращается ноль)
.map(myBoolean -> {
if (myBoolean) {
return null;
}
else {
return employee;
}
});
Мне кажется, мне не хватает понимания о map
против flatMap
В потоках Java 8 я понимаю разницу между map
и flatMap
(для каждого полученного элемента, map
испускает 1, flatMap
испускает N)
Но в Reactor я немного запутался. Я думал, что и map
, и flatMap
испускают 1 элемент для каждого полученного элемента, разница будет в том, что map
испускает его как Mono
, а flatMap
нет. Чтобы испустить N предметов, я бы использовал flatMapMany
.
Заранее спасибо за ваши объяснения!