Глубокое погружение в Stream API Java

Промежуточные операции — это типы операций, в которых несколь Изучение

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

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

Ниже упомянуто использование Stream в Java:

  1. Stream API — это способ выражения и обработки коллекций объектов.
  2. Позвольте нам выполнять такие операции, как фильтрация, сопоставление, сокращение и сортировка.

Как создать Java Stream?

Создание Java Stream — это один из самых основных шагов перед рассмотрением функциональных возможностей Java Stream. Ниже приведен синтаксис объявления Java Stream.

Синтаксис

Stream<T> stream;

Здесь T — это класс, объект или тип данных в зависимости от объявления.

Возможности Java-стрима

Особенности потока Java упомянуты ниже:

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

Различные операции над потоками

В потоках есть два типа операций:

  1. Промежуточные операции
  2. Завершить операции

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

Промежуточные операции — это типы операций, в которых несколь

Промежуточные операции — это типы операций, в которых несколько методов объединены в одну цепочку.

Характеристики промежуточных операций

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

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

Ниже приведены несколько промежуточных операций:

1. map()

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

List number = Arrays.asList(2,3,4,5);
List square = number.stream().map(x->x*x).collect(Collectors.toList());

2. filter()

Метод фильтра используется для выбора элементов в соответствии с предикатом, переданным в качестве аргумента.

List names = Arrays.asList("Reflection","Collection","Stream");
List result = names.stream().filter(s->s.startsWith("S")).collect(Collectors.toList());

3. sorted()

Метод sorted используется для сортировки потока.

List names = Arrays.asList("Reflection","Collection","Stream");
List result = names.stream().sorted().collect(Collectors.toList());

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

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

Важные операции с терминалом

Ниже приведены несколько терминальных операций:

1. collect()

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

List number = Arrays.asList(2,3,4,5,3);
Set square = number.stream().map(x->x*x).collect(Collectors.toSet());

2. forEach()

Метод forEach используется для перебора каждого элемента потока.

List number = Arrays.asList(2,3,4,5);
number.stream().map(x->x*x).forEach(y->System.out.println(y));

3. reduce()

Метод уменьшения используется для сведения элементов потока к одному значению. Метод сокращения принимает BinaryOperator в качестве параметра.

List number = Arrays.asList(2,3,4,5);
int even = number.stream().filter(x->x%2==0).reduce(0,(ans,i)-> ans+i);

Здесь переменной ans присваивается 0 в качестве начального значения и к ней добавляется i.

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

Пример Java Stream

Java

// Java program to demonstrate
// the use of stream in java
import java.util.*;
import java.util.stream.*;
class Demo {
    public static void main(String args[])
    {
        // create a list of integers
        List<Integer> number = Arrays.asList(2, 3, 4, 5);
        // demonstration of map method
        List<Integer> square
          = number.stream()
            .map(x -> x * x)
            .collect(Collectors.toList());
        // create a list of String
        List<String> names = Arrays.asList(
            "Reflection", "Collection", "Stream");
        // demonstration of filter method
        List<String> result
          = names.stream()
            .filter(s -> s.startsWith("S"))
            .collect(Collectors.toList());
      
        System.out.println(result);
        // demonstration of sorted method
        List<String> show
          = names.stream()
            .sorted()
            .collect(Collectors.toList());
      
        System.out.println(show);
        // create a list of integers
        List<Integer> numbers
            = Arrays.asList(2, 3, 4, 5, 2);
        // collect method returns a set
        Set<Integer> squareSet
          = numbers.stream()
            .map(x -> x * x)
            .collect(Collectors.toSet());
      
        System.out.println(squareSet);
        // demonstration of forEach method
        number.stream()
            .map(x -> x * x)
            .forEach(y -> System.out.println(y));
        // demonstration of reduce method
        int even
          = number.stream()
            .filter(x -> x % 2 == 0)
            .reduce(0, (ans, i) -> ans + i);
        System.out.println(even);
    }
}

Выход

[4, 9, 16, 25]
[Stream]
[Collection, Reflection, Stream]
[16, 4, 9, 25]
4
9
16
25
6

Важные моменты/наблюдения за Java Stream

  1. Поток состоит из источника, за которым следуют ноль или более промежуточных методов, объединенных вместе (конвейерно), и терминального метода для обработки объектов, полученных из источника, в соответствии с описанными методами.
  2. Stream используется для вычисления элементов согласно конвейерным методам без изменения исходного значения объекта.

Читайте также:  Что такое сетевые границы?
Оцените статью
bestprogrammer.ru
Добавить комментарий