Java Streams API, который был представлен в Java 8, меняет правила игры для эффективной обработки данных и манипулирования ими. Он предоставил мощный способ обработки коллекций данных в стиле функционального программирования, позволяющий разработчикам писать удобочитаемый и лаконичный код. В этом блоге мы отправимся в путешествие, чтобы изучить концепцию Java Streams API.

Что такое потоки Java?

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

Пример

Чтобы понять концепцию Streams API, давайте рассмотрим пример итерации источника данных с использованием как цикла, так и потоков.

Задание. Имея список сотрудников, назовите мне имена сотрудников, чья зарплата превышает 100 000. Предположим, что существует класс Employee, в котором есть атрибуты зарплаты и имени с определенными геттерами и сеттерами.

Использование циклов

private void usingLoop() {
    List<Employee> employees= List.of();
    List<String> result = new ArrayList<>();
    for(Employee e: employees){
        if(p.getSalary() > 100000){
            result.add(p.getName());
        }
    }
}

Мы перебираем список сотрудников и проверяем, соответствует ли сотрудник условию, что зарплата превышает 100 000, и добавляем имя этого человека в новый список.

Использование потоков

private void usingStreams() {
   List<Employee> employees= List.of();
    List<String> result = employees.stream()
            .filter(p -> p.getSalary() > 100000)
            .map(p -> p.getName())
            .collect(Collectors.toList());

Затем мы создаем поток из списка сотрудников с помощью метода stream(). Затем мы применяем промежуточную операцию filter() к потоку, которая отфильтровывает всех сотрудников, чья зарплата меньше или равна 100 000, а затем сопоставляет сотрудника с его именем. Наконец, мы собираем отфильтрованные элементы в новый список, используя метод collect().

Когда мы рассматриваем оба метода, мы выполняем одну и ту же функцию, но мы сделали ее более явной, используя потоки. Используя потоки, код становится более читабельным, масштабируемым и удобным в сопровождении.

Преимущества Java Streams API

  • Отложенное вычисление. В потоках используется отложенное вычисление, то есть операции выполняются только при необходимости.
  • Расширенная возможность повторного использования. Создав поток, вы можете использовать его несколько раз без изменения исходного источника данных. Это делает ваш код более пригодным для повторного использования и снижает вероятность ошибок при внесении изменений.
  • Связывание методов. Это означает, что несколько операций могут быть объединены в одном операторе. Это упрощает код и обеспечивает эффективное выполнение за счет оптимизации последовательности операций.
  • Краткость и удобочитаемость.стиль функционального программирования устраняет необходимость в явных циклах и временных переменных, что упрощает понимание кода.

Надеюсь, что у вас есть базовые знания о Java Streams API.

Когда мы видим приведенный выше код с использованием потоков, мы видим, что есть стандартные операции, такие как фильтр, карта. В следующем блоге я углублюсь в различные потоковые операции и покажу, как они позволяют нам с легкостью манипулировать данными.

Спасибо, что прочитали!