Спросят с вероятностью 44%
Stream — это абстракция, которая позволяет обрабатывать последовательности элементов (например, коллекции) в функциональном стиле. API был добавлен в Java 8 и представляет собой набор классов и интерфейсов в пакете
java.util.stream. Основная цель — упростить работу с коллекциями данных, позволяя выполнять различные операции с элементами последовательности, такие как фильтрация, сортировка, преобразование, агрегирование и другие, без необходимости явно писать циклы и управлять итерациями.Особенности:
1️⃣ Не изменяет исходные данные: Операции с потоками данных не модифицируют исходную коллекцию, что способствует функциональному подходу и неизменяемости данных.
2️⃣ Ленивая обработка: Большинство операций с потоками выполняются лениво, то есть вычисления начинаются только тогда, когда это необходимо для получения результата (например, при вызове терминальной операции).
3️⃣ Поддержка параллельной обработки: Позволяет легко выполнять операции над элементами коллекции параллельно, что может значительно ускорить обработку больших наборов данных на многопроцессорных системах.
Основные операции:
Операции с потоками данных делятся на промежуточные (intermediate) и терминальные (terminal).
- Промежуточные операции возвращают новый поток и включают фильтрацию (
filter), преобразование (map), сортировку (sorted) и другие. Они используются для преобразования потока и могут быть объединены в цепочки.- Терминальные операции возвращают результат определенного типа (например, коллекцию, значение, boolean) или выполняют действие (
forEach). К терминальным операциям относятся collect, reduce, count, findFirst.import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class StreamExample {
public static void main(String[] args) {
List<String> strings = Arrays.asList("apple", "banana", "cherry", "date");
// Фильтрация и преобразование списка строк в список их длин
List<Integer> lengths = strings.stream() // Создание потока
.filter(s -> s.length() > 5) // Фильтрация строк по длине
.map(String::length) // Преобразование строки в её длину
.collect(Collectors.toList()); // Сбор результатов в список
System.out.println(lengths); // Вывод: [6, 6]
}
}
Stream API обеспечивает мощный и гибкий инструментарий для работы с данными в декларативном стиле, позволяя сосредоточиться на операциях обработки данных, а не на управлении итерациями и хранением промежуточных результатов.
👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых