Stream
и Flux
совершенно разные:
Stream
- одноразовое использование, в то время как вы можете подписаться несколько раз на Flux
Stream
основано на вытягивании (использование одного элемента требует следующего), в то время как Flux
имеет гибридную модель выталкивания / извлечения, в которой издатель может выдвигать элементы, но все же должен учитывать обратное давление, сигнализируемое потребителем Stream
являются синхронными последовательностями, а Flux
может представлять асинхронные последовательности
Например, вы генерируете бесконечную последовательность значений с помощью Stream
, они создаются и потребляются максимально быстро.В вашем примере Flux
вы создаете значения с фиксированным интервалом (что-то, что я не уверен, что вы можете сделать с Stream
).С Flux
вы также можете Flux.generate
последовательности без интервалов, как ваш Stream
пример.
В общем, вы можете рассматривать Flux
как сочетание Stream
+ CompletableFuture
,с:
- множеством мощных операторов
- поддержка противодавления
- контроль над поведением издателя и подписчика
- контроль над понятием времени (буферизацияокна значений, добавление таймаутов и откатов и т. д.)
- что-то специально для асинхронных последовательностей, извлекаемых по сети (из базы данных или удаленного веб-API)