TLDR; Flux#doOnNext
для побочных эффектов, Flux#map
для синхронного отображения чего-то из одного типа в другой.
Если мы посмотрим на документацию , то для doOnNext
будет сказано следующее
Flux<T> doOnNext(Consumer<? super T> onNext)
Add behavior (side-effect) triggered when the Flux emits an item.
это означает, что в doOnNext
мы можем создавать побочные эффекты, такие как log, или делать где-нибудь еще вызов и т. Д. c. и др c. Мы также возвращаем Flux типа T, то есть тот же, что принимает doOnNext
, поэтому никаких изменений типа.
Если мы, с другой стороны, посмотрим на Map
:
Flux<V> map(Function<? super T,? extends V> mapper)
Transform the items emitted by this Flux by applying a synchronous function to
each item.
Мы можем прочитать, что здесь мы можем применить синхронную функцию, в основном, мы можем сделать что-то с нашим выдаваемым значением. Добавьте что-то, вычтите что-нибудь, измените это каким-то образом, здесь мы можем преобразовать это, например, map
это во что-то другое.
Если мы посмотрим на типы в map
, мы увидим, что map
испустит что-то super T
, но вернет что-то такое, что extends V
Это типичный шаблон java генериков, и если вы хотите sh узнать больше об этом, я рекомендую вам посмотреть Джошуа Блохс говорит о дженериках . Все видео - хорошие часы и объяснит это намного лучше, чем я.
Но я хочу отметить, что при использовании карты вы возвращаете другой тип . Вы получаете что-то, что super T
из потока, затем вы отображаете это на что-то еще, что extends V
.