Фото ️🔁 Radek Jedynak 🔃 on ️🔁 Unsplash 🔃

RedDeveloper
11.03.2023 11:30
Фото ️🔁 Radek Jedynak 🔃 on ️🔁 Unsplash 🔃

Что такое Java 8 Streams API? Java 8 Stream API

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

Поток создается путем вызова метода stream() на коллекции:Потоки позволяют

List<String> myList = Arrays.asList("apple", "banana", "cherry", "date", "strawberry", "orange", "blueberry");
Stream<String> myStream = myList.stream();
System.out.println(myStream);
Он печатает ссылку на объект ReferencePipeline$Head, который представляет собой голову конвейера потока. Эта ссылка не предоставляет никакой информации о данных в потоке, а скорее представляет собой начальную точку для серии операций обработки потока.
Включает имя класса, за которым следует хэш-код объекта.
java.util.stream.ReferencePipeline$Head@e9e54c2

Промежуточные операции

Они возвращают новый поток, позволяя выполнять над ним дальнейшие операции.

  1. filter():
  2. Метод toString() вызывается, когда вы выводите объект на консоль, и по умолчанию он ре

Он позволяет фильтровать элементы потока на основе некоторого условия. Например, чтобы отфильтровать все элементы, начинающиеся с буквы "b" в потоке строк, можно использовать метод filter() следующим образом:

 List<String> filteredList = myList.stream().filter(s -> s.startsWith("b")).collect(Collectors.toList());

Вывод:

[banana, blueberry]

2. map():

Преобразует элементы потока в другую форму.

Пример: Преобразуйте поток строк в поток их длин следующим образом:

 List<Integer> mappedList = myList.stream().map(s -> s.length()).collect(Collectors.toList());

Вывод:

[5, 6, 6, 4, 10, 6, 9]

3. flatMap():

Применяет функцию к каждому элементу потока, в результате чего может получиться несколько элементов. Затем они сплющиваются в один поток.

Stream<String> stringStream = Stream.of("hello world", "welcome to Java");
List<String> flatMapList = stringStream.flatMap(str -> Stream.of(str.split(" "))).collect(Collectors.toList());

Вывод:

[hello, world, welcome, to, Java]

4. distinct():

Возвращает поток, состоящий из уникальных элементов исходного потока.

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 1, 2, 5, 3, 6, 4);
List<Integer> uniqueNumbers = numbers.stream()
                                      .distinct()
                                      .collect(Collectors.toList());

Вывод:

[1, 2, 3, 4, 5, 6]

5. sorted():

Сортирует элементы потока на основе некоторых критериев.

Завершить обработку потока и вернуть результат или побочный эффект.

List<String> sortedList = myList.stream().sorted().collect(Collectors.toList());

Вывод:

[apple, banana, blueberry, cherry, date, orange, strawberry]

Возвращает количество элементов в потоке.

    Выход: 2

2. reduce():Пример: Отсортировать поток строк в порядке возрастания:

Выход:

long count = myList.stream()
                       .filter(s -> s.startsWith("b"))
                       .count();

Терминальные операции

Они

T:

Например, собрать все элементы потока строк в список:

String result = myList.stream().reduce("", (s1, s2) -> s1 + s2);

Вывод:

applebananacherrydatestrawberryorangeblueberry

Например, собрать все элементы потока строк в список:

Например: конкатенировать все элементы потока строк в одну строку:

4. forEach()Он объединяет элементы потока в один результат.

List<String> myList = myStream.collect(Collectors.toList());

Вывод:

[apple, banana, cherry, date, strawberry, orange, blueberry]

Outpu

ForEach() - это терминальная операция, которая принимает Consumer и применяет его к каждому элементу потока. Она ничего не возвращает. Это метод пустоты.

Пример: мы используем ссылку на метод System.out::println в качестве потребителя для печати каждого элемента на консоль.

List<String> fruits = Arrays.asList("apple", "banana", "cherry", "date");
fruits.stream().forEach(System.out::println);

Вывод:

I like to eat apple
I like to eat banana
I like to eat cherry

5. findFirst()

Удовлетворяет определенному условию. Если найден подходящий элемент, возвращается объект Optional, содержащий этот элемент.

List<Integer> n = Arrays.asList(1, 3, 5, 7, 9, 11);
Optional<Integer> r = n.stream().filter(number -> number > 5)
                                .findFirst().get();

Вывод: 7

Ленивая загрузкаИскать первый элемент в потоке, который

Поток не выполняет никаких операций, пока не будет вызвана терминальная операция (например, forEach(), collect() и др. ) не будет вызвана. Это означает, что промежуточные операции (filter(), map(), sorted() и др. ) выполняются только после вызова терминальной операции.

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
Stream<Integer> stream = numbers.stream()
                                 .filter(n -> n % 2 == 0)
                                 .map(n -> n * n);

В этом случае промежуточными операциями являются filter() и map(), но поскольку не вызывается ни одна терминальная операция, поток не выполняет никакого кода. Поэтому операции filter() и map() считаются лениво загруженными.

Чтобы выполнить эти операции и получить результат, нам нужно вызвать терминальную операцию. Например, мы можем использовать метод forEach() для печати результирующего потока:

stream.forEach(System.out::println);

Вывод:

4
16
36
64
100

Теперь поток

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?

20.08.2023 18:21

Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в 2023-2024 годах? Или это полная лажа?".

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией

20.08.2023 17:46

В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox

19.08.2023 18:39

Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в частности, магию поплавков и гибкость flexbox.

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest

19.08.2023 17:22

В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для чтения благодаря своей простоте. Кроме того, мы всегда хотим проверить самые последние возможности в наших проектах!

Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️

18.08.2023 20:33

Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий их языку и культуре.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL

14.08.2023 14:49

Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип предназначен для представления неделимого значения.