Создание потоков в Java

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

  1. Создание Конечных Потоков. Пустой поток. Из значений. Из коллекций. Stream.Builder
  2. Создание Бесконечных Потоков. Stream.iterate(). Поток.генерировать()
  3. Заключение

Создание Конечных Потоков

Пустой поток

Вы можете использовать метод Stream.empty() для создания пустого потока.

Stream<String> emptyStream = Stream.empty();

Из Значений

В Java Stream.of() создает поток из предоставленных значений в виде переменных-аргументов, массива или списка.

static <T> Stream<T> of(T... values);

Давайте рассмотрим несколько примеров создания потока значений.

Stream<Integer> stream = Stream.of(1,2,3,4,5,6,7,8,9);  //from var args

Stream<Integer> stream = Stream.of( new Integer[]{1,2,3,4,5,6,7,8,9} );  //from array

Employee[] arrayOfEmps = {
    new Employee(1, "A", LocalDate.of(1991, 1, 1), 10000d),
    new Employee(2, "B", LocalDate.of(1992, 1, 1), 20000d),
    new Employee(3, "C", LocalDate.of(1993, 1, 1), 30000d)
};

Stream<Employee> employeeStream = Stream.of(arrayOfEmps);

Из коллекций

Мы также можем получить поток из классов коллекций Java, таких как List, Map и Set.

List<String> list = Arrays.asList("A", "B", "C", "D");
Stream<String> stream = list.stream();

Аналогично, получите поток с карты.

Map<String, Integer> map = new HashMap<>();
map.put("A", 1);

Stream<String> keyStream = map.keySet().stream();
Stream<Integer> valStream = map.values().stream();
Stream<Map.Entry<String, Integer>> entryStream = map.entrySet().stream();

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

String[] arr = { "A", "B", "C", "D" };

Stream<String> stream = Arrays.stream(arr);

Stream.Builder

Класс Stream.Builder следует шаблону builder, в котором мы поэтапно добавляем элементы в поток и, наконец, вызываем метод build(), чтобы получить поток.

Stream<String> streamBuilder = Stream.<String>builder()
                                            .add("A")
                                            .add("B")
                                            .build();

Создание бесконечных потоков

Используйте следующие методы для создания бесконечных потоков в Java.

  1. iterate(seed, function) – принимает два параметра – начальное значение, которое является первым членом в потоке, и функцию для получения значения следующего элемента в потоке. Мы можем ограничить поток с помощью метода limit().
  2. generate(supplier) – принимает Supplier, который предоставляет бесконечную серию элементов, которые помещаются в поток. Затем метод limit() может быть вызван в цепочке потоков, чтобы остановить серию после определенного количества элементов. Это подходит для генерации постоянных потоков, потоков случайных элементов и т.д.

Stream.iterate()

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

Stream<Integer> infiniteEvenNumbers = 
      Stream.iterate(0, n -> n + 2).limit(10);

Stream.generate()

В аналогичном примере создается поток из 10 случайных чисел в диапазоне от 0 до 99 с помощью функции generate().

Random rand = new Random();

Stream<Integer> stream =
    Stream.generate(() -> rand.nextInt(100)).limit(20);

Вывод

В этом потоковом руководстве по Java 8 мы научились использовать элементы конечного потока, а также бесконечные потоки элементов. Мы видели использование функции limit(), которая используется для выбора первых N элементов из бесконечного потока.

Добавить комментарий

Ваш адрес email не будет опубликован.

5 − два =