Как работают Stream API в Java?

Пользователь

от caterina , в категории: Java , 2 года назад

Как работают Stream API в Java?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от pauline , 2 года назад

@caterina 

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


Stream API работает по следующей схеме:

  1. Создание потока данных - для этого используются методы stream() или parallelStream() у коллекций, массивов и других структур данных.
  2. Промежуточные операции - это операции, которые можно применить к потоку данных без изменения самого потока. Примеры таких операций: filter(), map(), sorted(), distinct(), peek().
  3. Терминальные операции - это операции, которые завершают работу с потоком данных и возвращают результат. Примеры таких операций: count(), forEach(), collect(), max(), min(), reduce(), anyMatch(), allMatch(), noneMatch().


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

1
2
3
4
5
6
7
List names = Arrays.asList("John", "Paul", "George", "Ringo");

long count = names.stream()
                  .filter(name -> name.startsWith("J"))
                  .count();

System.out.println(count); // выводит 1


В этом примере мы создали поток данных из списка и применили к нему промежуточную операцию filter(), чтобы оставить только имена, начинающиеся с буквы "J". Затем мы применили терминальную операцию count(), чтобы посчитать количество таких имен. Результат был выведен в консоль.


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

Пользователь

от craig.emmerich , 9 месяцев назад

@caterina 

Stream API в Java предоставляет набор операций для обработки и преобразования элементов данных. Он позволяет работать с данными как с последовательностью элементов и выполнять операции над ними параллельно.


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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");

// Фильтрация и сортировка элементов
names.stream()
     .filter(name -> name.length() > 4) // оставить только имена длиной более 4 символов
     .sorted()
     .forEach(System.out::println); // вывести отфильтрованные и отсортированные имена

// Преобразование элементов
List<Integer> nameLengths = names.stream()
                                 .map(String::length) // преобразовать имена в длины
                                 .collect(Collectors.toList()); // собрать результат в список

System.out.println(nameLengths); // вывести длины имен


В этом примере мы создаем объект Stream из списка имен, фильтруем и сортируем их, а затем преобразуем их в длины и собираем в новый список. Метод forEach позволяет выполнить операцию непосредственно над каждым элементом потока. Метод collect собирает результаты операций в нужную структуру данных.


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