Как вы знаете, stream – это поток. Вообще, в Java много всяких потоков. Вот недавно мы закончили небольшой блок про многопоточность. Мы говорили о потоках в программе, которые могут выполнять блоки кода одновременно. Обычно они называются Thread, тут вряд ли их можно перепутать. Есть еще потоки записи и чтения данных. Они тоже Stream, но I/O - input/output (потоки ввода/вывода). Они используются для, например, чтения и записи файлов.
А на этом уроке мы говорим о потоках которые так и называются Stream API и позволяют легко работать с данными в коллекциях. Они находятся в java.util.stream
и были добавлены в JDK 8. Иногда, в русскоязычных переводах этот класс называется “потоковый API”. Stream API преобразует массив или коллекцию в поток данных, при этом, никаких изменений с исходным массивом не происходит, скорее наоборот - результатом работы stream API над данными будет новая коллекция.
Вообще, Stream API любимый способ всех Java разработчиков работы с коллекциями. Этот способ изящно и удобно позволяет вам отфильтровать, преобразовать, объединить данные, а так же выгодно отличает код middle/senior от типичного junior. В этом уроке мы посмотрим как можно резко повысить качество и читабельность своего кода, получить дополнительные очки на любом интервью и тестовом задании.
Зачем мы на прошлом уроке сначала разобрали лямбда выражения и функциональные интерфейсы? Потому что в интерфейсе Stream есть методы, которые можно переопределять тем самым лямбда выражением! Сейчас посмотрим как это выглядит, но идея такая - говорим, фильтруем элементы (вызываем метод filter) и дальше уже в лямбда выражение говорим как именно фильтруем - ведь каждую коллекцию нужно фильтровать по-разному, так?
Этот оператор был добавлен так же в JDK 8. Выглядит он вот так для статического контекста (для вызова статического метода):
ИмяКласса :: имяМетода
System.out::println
Для не статического вызова (вызов метода у объекта):
имяПеременнойОбъекта::имяМетода
player1::isActive
Формально, это укороченная запись лямбда выражения или ссылка на метод:
1 -> System.out.println(1);
В современных версиях Idea она будет сама вам подсказывать возможности замены лямбда выражения на двойное двоеточие.