Введение в Stream API в Java
Поток в Java похож на привычную цепочку
filter и map у списка, но промежуточные
шаги сначала только описывают работу. Реальный обход
элементов начинается, когда в конце появляется
конечная операция, которой нужен готовый результат.
С Java 8 потоки встроены в стандартную библиотеку.
Их получают из коллекции методом stream, из
массива через Arrays.stream или из отдельных
источников вроде строк и диапазонов чисел. Дальше
к потоку цепляют шаги и завершают цепочку командой
сбора или проверки.
Короткий пример: отбор чисел не меньше десяти и сбор результата в список в конце:
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> nums = List.of(10, 14, 7, 20);
var chain = nums.stream()
.filter(n -> n >= 10);
List<Integer> picked = chain.toList();
System.out.println(picked);
}
}
Пока вызван только filter, программа лишь
запомнила правило отбора. Сравнения с элементами
списка произойдут внутри toList, когда
цепочке понадобится собрать итог.
Переменная chain хранит описание шагов, а не
готовый список отфильтрованных чисел. Такой прием
удобен, когда данных много или цепочка длинная:
лишняя работа не выполняется, пока результат
действительно не запросят.
Конечный шаг может быть другим: посчитать длину, взять первый элемент или свернуть значения. Общее правило одно: промежуточная операция сама по себе не запускает полный проход по исходным данным.