Приведи пример промежуточных операций в Stream API
1️⃣ Как кратко ответить
Промежуточные операции в Stream API — это операции, которые преобразуют поток данных и возвращают новый поток. Примеры таких операций: filter(), map(), sorted(), distinct(), limit(), skip(). Они ленивы и выполняются только при вызове терминальной операции.
2️⃣ Подробное объяснение темы
Stream API в Java предоставляет мощный инструмент для работы с последовательностями данных. Промежуточные операции — это ключевой компонент Stream API, который позволяет преобразовывать и фильтровать данные в потоке. Эти операции всегда возвращают новый поток, что позволяет их комбинировать в цепочки.
Зачем нужны промежуточные операции?
Промежуточные операции позволяют:
- Фильтровать данные, оставляя только те элементы, которые соответствуют определенным условиям.
- Преобразовывать данные из одного типа в другой.
- Упорядочивать данные.
- Удалять дубликаты.
- Ограничивать количество элементов в потоке.
Примеры промежуточных операций
-
filter(Predicate<? super T> predicate): Оставляет только те элементы, которые соответствуют заданному условию.List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David"); Stream<String> filteredStream = names.stream().filter(name -> name.startsWith("A")); // Оставляет только "Alice"names.stream(): Создает поток из списка имен.filter(name -> name.startsWith("A")): Применяет условие, оставляя только имена, начинающиеся с "A".
-
map(Function<? super T, ? extends R> mapper): Преобразует каждый элемент потока.List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); Stream<Integer> lengthStream = names.stream().map(String::length); // Преобразует имена в их длины: 5, 3, 7map(String::length): Преобразует каждое имя в его длину.
-
sorted(): Упорядочивает элементы потока в естественном порядке.List<Integer> numbers = Arrays.asList(3, 1, 4, 1, 5, 9); Stream<Integer> sortedStream = numbers.stream().sorted(); // Упорядочивает числа: 1, 1, 3, 4, 5, 9sorted(): Упорядочивает элементы в естественном порядке.
-
distinct(): Удаляет дубликаты из потока.List<Integer> numbers = Arrays.asList(1, 2, 2, 3, 4, 4, 5); Stream<Integer> distinctStream = numbers.stream().distinct(); // Удаляет дубликаты: 1, 2, 3, 4, 5distinct(): Удаляет повторяющиеся элементы.
-
limit(long maxSize): Ограничивает количество элементов в потоке.List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David"); Stream<String> limitedStream = names.stream().limit(2); // Ограничивает поток до первых двух элементов: "Alice", "Bob"limit(2): Ограничивает поток до двух элементов.
-
skip(long n): Пропускает первыеnэлементов потока.List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David"); Stream<String> skippedStream = names.stream().skip(2); // Пропускает первые два элемента: "Charlie", "David"skip(2): Пропускает первые два элемента.
Как работают промежуточные операции?
Промежуточные операции ленивы, то есть они не выполняются до тех пор, пока не будет вызвана терминальная операция, такая как collect(), forEach(), reduce() и другие. Это позволяет оптимизировать выполнение, так как операции могут быть объединены и выполнены за один проход по данным.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться