Нахождение последнего элемента в стриме
[Нахождение последнего элемента в стриме]
Иногда возникает задача нахождения последнего элемента в стриме. Первый элемент можно получить с помощью метода findFirst, но как же найти последний?
Поиск последнего элемента
Для нахождения последнего элемента можно воспользоваться оператором reduce, который принимает на вход два элемента стрима и возвращает один:
public static <T> T getLastElement(Stream<T> stream) {
return stream
.reduce((e1, e2) -> e2)
.orElse(null);
}
В данном случае нам нужно всегда возвращать второй аргумент их двух переданных — и, в конце концов, мы получим на выходе последний элемент. Точнее, получим Optional, который может содержать элемент или быть пустым.
[]
Исходный код
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
public class GetLastElementInStream {
public static void main(String[] args) {
List<String> ids = Arrays.asList("111", "222", "333", "444", "555", "666", "777");
System.out.println("Все элементы: " + ids);
String lastElement = getLastElement(ids.stream());
System.out.println("Последний элемент: " + lastElement);
}
public static <T> T getLastElement(Stream<T> stream) {
return stream
.reduce((e1, e2) -> e2)
.orElse(null);
}
}
Заключение
Для нахождения последнего элемента в стриме проще всего использовать метод reduce, который с каждой итерацией уменьшает количество элементов на 1 и в итоге мы получим последний оставшийся элемент стрима.
Нахождение последнего элемента в стриме
Комментарии 0