Stream API

Java Stream API - это нововведение, представленное в Java 8, которое позволяет выполнять функциональные операции на коллекциях данных с использованием лямбда-выражений. Stream API позволяет лаконично выполнять операции фильтрации, преобразования, сортировки и агрегации данных, делая код более читаемым и поддерживаемым.

Основные преимущества Stream API:

  1. Удобство и краткость кода: Stream API позволяет писать компактный и выразительный код, используя цепочку операций над данными.

  2. Ленивая вычислительная модель: Многие операции Stream API выполняются лениво, что означает, что они вычисляются только при необходимости. Это повышает производительность и экономит ресурсы.

  3. Параллельная обработка данных: Stream API поддерживает параллельную обработку данных, что позволяет использовать все ядра процессора для ускорения выполнения операций.

  4. Интеграция с лямбда-выражениями: Stream API хорошо интегрируется с лямбда-выражениями, что позволяет писать гибкий и функциональный код.

Примеры операций Stream API:

import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "Eva");

        // Фильтрация и сортировка имен, начинающихся с буквы "A", в верхнем регистре
        names.stream()
            .filter(name -> name.startsWith("A"))
            .map(String::toUpperCase)
            .sorted()
            .forEach(System.out::println);

        // Вычисление суммы квадратов чисел
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
        int sumOfSquares = numbers.stream()
                                 .mapToInt(x -> x * x)
                                 .sum();
        System.out.println("Сумма квадратов чисел: " + sumOfSquares);
    }
}

В этом примере мы создаем поток данных из списка имен names, фильтруем имена, начинающиеся с буквы "A", преобразуем их в верхний регистр, сортируем и выводим на экран. Затем мы используем метод sum() для вычисления суммы квадратов чисел из списка numbers.

  1. filter: Фильтрует элементы потока с помощью предиката (функции, возвращающей булево значение).

    stream.filter(predicate)
  2. map: Преобразует каждый элемент потока с помощью переданной функции.

    stream.map(mapper)
  3. flatMap: Преобразует каждый элемент потока в поток других элементов и объединяет их в один поток.

    stream.flatMap(mapper)
  4. distinct: Удаляет дубликаты из потока.

    stream.distinct()
  5. sorted: Сортирует элементы потока в заданном порядке.

    stream.sorted()
  6. limit: Ограничивает количество элементов в потоке.

    stream.limit(n)
  7. skip: Пропускает первые n элементов в потоке.

    stream.skip(n)
  8. forEach: Применяет действие к каждому элементу потока.

    stream.forEach(action)
  9. reduce: Объединяет элементы потока в одно значение.

    stream.reduce(identity, accumulator)
  10. collect: Собирает элементы потока в коллекцию или другую структуру данных.

    stream.collect(collector)
  11. anyMatch: Проверяет, удовлетворяет ли хотя бы один элемент потока условию.

    stream.anyMatch(predicate)
  12. allMatch: Проверяет, удовлетворяют ли все элементы потока условию.

    stream.allMatch(predicate)
  13. noneMatch: Проверяет, не удовлетворяет ли ни один элемент потока условию.

    stream.noneMatch(predicate)
  14. findFirst: Возвращает первый элемент потока.

    stream.findFirst()
  15. findAny: Возвращает любой элемент потока.

    stream.findAny()

Last updated