Встречается на собеседованиях • сегодня

что такое Stream в Java ?

`Stream` — это абстракция, которая позволяет обрабатывать последовательности элементов (например, коллекции) в функциональном стиле. API был добавлен в Java 8 и представляет собой набор классов и интерфейсов в пакете `java.util.stream`. Основная цель — упростить работу с коллекциями данных, позволяя выполнять различные операции с элементами последовательности, такие как фильтрация, сортировка, преобразование, агрегирование и другие, без необходимости явно писать циклы и управлять итерациями.

Особенности:

1. Не изменяет исходные данные: Операции с потоками данных не модифицируют исходную коллекцию, что способствует функциональному подходу и неизменяемости данных.
2. Ленивая обработка: Большинство операций с потоками выполняются лениво, то есть вычисления начинаются только тогда, когда это необходимо для получения результата (например, при вызове терминальной операции).
3.

Поддержка параллельной обработки: Позволяет легко выполнять операции над элементами коллекции параллельно, что может значительно ускорить обработку больших наборов данных на многопроцессорных системах.

Основные операции:

Операции с потоками данных делятся на промежуточные (intermediate) и терминальные (terminal).

  • Промежуточные операции возвращают новый поток и включают фильтрацию (`filter`), преобразование (`map`), сортировку (`sorted`) и другие. Они используются для преобразования потока и могут быть объединены в цепочки.
  • Терминальные операции возвращают результат определенного типа (например, коллекцию, значение, boolean) или выполняют действие (`forEach`). К терминальным операциям относятся `collect`, `reduce`, `count`, `findFirst`.

Пример использования:

java
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 обеспечивает мощный и гибкий инструментарий для работы с данными в декларативном стиле, позволяя сосредоточиться на операциях обработки данных, а не на управлении итерациями и хранением промежуточных результатов.

Feb. 22, 2024, easyoffer

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы