Рубрики
Без рубрики

Как получить последний элемент потока на Java?

Посмотрите, как получить последний элемент потока на Java.

Автор оригинала: baeldung.

1. Обзор

Java Поток API был главной особенностью выпуска Java 8. Потоки представляют лениво оцениваемые последовательности объектов и обеспечивают богатый, беглый и монадический API.

В этой статье мы кратко изумим способы получения последнего элемента поток. Имейте в виду, что из-за природы потоков, это не естественная операция . Всегда убедитесь, что вы не работаете с бесконечными Потоки.

2. Использование API сокращения

Снижение , проще говоря, уменьшает набор элементов в Поток к одному элементу.

В этом случае мы соберем набор элементов, чтобы получить последний элемент fn поток. Имейте в виду, что этот метод будет возвращать только детерминистские результаты для последовательного Потоки.

Давайте использовать Список Струнные значения, получить Поток из Список а затем уменьшить:

List valueList = new ArrayList<>();
valueList.add("Joe");
valueList.add("John");
valueList.add("Sean");

Stream stream = valueList.stream();
stream.reduce((first, second) -> second)
  .orElse(null);

Здесь поток сводится к уровню, где он остается только с последним элементом. Если поток пуст, он вернет нулевой ценность.

2. Использование функции пропуска

Другой способ получить последний элемент потока – это пропуская все элементы, прежде чем он . Это может быть достигнуто с помощью Пропустить функции Поток класс. Имейте в виду, что в этом случае, мы потребляем Поток в два раза, так что есть некоторые четкие последствия .

Давайте создадим Список значения строки и использовать ее размер функции, чтобы определить, сколько элементов, чтобы пропустить, чтобы достичь последнего элемента.

Вот пример кода получения последнего элемента с помощью пропустить :

List valueList = new ArrayList();
valueList.add("Joe");
valueList.add("John");
valueList.add("Sean");

long count = valueList.stream().count();
Stream stream = valueList.stream();
   
stream.skip(count - 1).findFirst().get();

“Шон” заканчивается тем, что последний элемент.

4. Получение последнего элемента бесконечного потока

Попытка получить последний элемент бесконечного потока приведет к бесконечной последовательности оценки, выполненной на бесконечных элементах. Оба пропустить и уменьшить не вернется из выполнения оценки, если мы не ограничим бесконечный поток определенным количеством элементов, использующих предельный операция.

Вот пример кода, где мы взяли бесконечный поток и попытались получить последний элемент:

Stream stream = Stream.iterate(0, i -> i + 1);
stream.reduce((first, second) -> second).orElse(null);

Следовательно, поток не вернется из оценки, и он будет в конечном итоге прекращение выполнения программы .

5. Заключение

Мы видели различные способы получения последнего элемента Поток оба с помощью уменьшить и Пропустить пчела. Мы также посмотрели, почему это невозможно с бесконечными потоками.

Мы видели, что получение последнего элемента из Поток нелегко по сравнению с получением его из других структур данных. Это из-за ленивый характер Потоки которые не оцениваются, если функция терминала не вызывается и не мы никогда не знаем, является ли оцениваемый в настоящее время элемент последним.

Фрагменты кода можно найти более чем на GitHub.