Reactor Spring WebFlux: объясните, пожалуйста, разницу между методами last () и takeLast ()

Может ли кто-нибудь объяснить мне разницу между методами last () и takeLast()? Как говорится в документации:

last () - испускает последний элемент, наблюдаемый перед полным сигналом, как Mono, или генерирует ошибку NoSuchElementException, если источник был пуст. Для пассивной версии используйте takeLast(int)

takeLast() - испускает последние N значений, сгенерированных этим потоком перед его завершением.

Как по мне то же самое. Не могу понять отличий. Может кто-нибудь объяснить мне простой пример? заранее спасибо

1 ответ

Решение

Кирилл,

takeLast(int n) принимает целое число, указывающее, сколько элементов следует оставить в потоке. Пример:

Flux.just(1, 2, 3, 4)
        .takeLast(3)
        .subscribe(System.out::println);

Результат с

234

Между тем, last() Метод касается только самого последнего испущенного элемента.

Flux.just(1, 2, 3, 4)
        .last()
        .subscribe(System.out::print);

На выходе

4


Вывод: takeLast(1) равно last()

Другие вопросы по тегам