Фото ️🔁 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 на IIS без использования программы установки веб-платформы
Запуск PHP на IIS без использования программы установки веб-платформы

19.03.2023 13:43

Установщик веб-платформы, предлагаемый компанией Microsoft, перестанет работать 31 декабря 2022 года. Его закрытие привело к тому, что мы не можем запускать наши php-файлы через localhost на наших компьютерах. Мне с трудом удалось установить его и я решил поделиться этой статьей, чтобы помочь тем,...

Оптимизация React Context шаг за шагом в 4 примерах
Оптимизация React Context шаг за шагом в 4 примерах

19.03.2023 13:03

При использовании компонентов React в сочетании с Context вы можете оптимизировать рендеринг, обернув ваш компонент React в React.memo сразу после поставщика контекста. Это позволит избежать ненужных повторных рендеров.

Библиотека для работы с мороженым
Библиотека для работы с мороженым

19.03.2023 11:50

Лично я попрощался с операторами print() в python. Без шуток.

Настройка шаблона Metronic с помощью Webpack и Gulp
Настройка шаблона Metronic с помощью Webpack и Gulp

19.03.2023 06:15

Я пишу эту статью, чтобы поделиться тем, как настроить макет Metronic с помощью Sass, поскольку Metronic предоставляет так много документации, и они постоянно обновляют версию (а нам нужно быстро наверстать упущенное!).

Уроки CSS 6
Уроки CSS 6

18.03.2023 11:32

Здравствуйте дорогие читатели, я Ферди Сефа Дюзгюн, сегодня мы продолжим с вами уроки css. Сегодня мы снова продолжим с так называемых классов.

Что такое Css? Для чего он используется?
Что такое Css? Для чего он используется?

18.03.2023 11:16

CSS, или "Каскадные таблицы стилей", - это язык стилей, используемый в веб-страницах. CSS является одним из основных инструментов веб-разработки наряду с HTML и JavaScript.