В Java стримы представляют собой новый функциональный интерфейс, предназначенный для работы с последовательностями элементов. Стримы позволяют выполнять различные операции (такие как фильтрация, отображение, сортировка и другие) над элементами последовательности. Операции над стримами можно разделить на терминальные и нетерминальные.
Терминальные операции:
Терминальные операции - это операции, которые завершают обработку стрима, возвращая результат или выполняя побочные эффекты. После выполнения терминальной операции нельзя продолжить работу с тем же стримом.
Примеры терминальных операций в Java:
1. forEach: Выполняет заданное действие для каждого элемента стрима.
2. collect: Собирает элементы стрима в коллекцию или другую структуру данных.
3. reduce: Сводит элементы стрима к единственному значению (например, сумма или максимальное значение).
Нетерминальные (ленивые) операции:
Нетерминальные операции - это операции, которые возвращают другой стрим и позволяют создавать цепочки операций. Эти операции не выполняются немедленно, а откладывают свое выполнение до тех пор, пока не будет вызвана терминальная операция.
Примеры нетерминальных операций в Java:
1. filter: Фильтрует элементы стрима в соответствии с заданным условием.
2. map: Преобразует каждый элемент стрима в другой объект.
3. sorted: Сортирует элементы стрима.
Почему операции со стримами называют ленивыми?
Операции со стримами называют ленивыми потому, что они выполняются только тогда, когда требуется получить результат, а не немедленно после вызова. Нетерминальные операции создают цепочку операций, и все они выполняются только при вызове терминальной операции. Это позволяет оптимизировать выполнение операций и избегать лишних вычислений, что особенно важно при работе с большими объемами данных.