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

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

1. Создание конечных потоков

1.1.Пустой поток

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

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

1.2 Из ценностей

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

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

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

Stream<Integer> stream = Stream.of(1,2,3,4,5,6,7,8,9); //from var argsStream<Integer> stream = Stream.of( new Integer[]{1,2,3,4,5,6,7,8,9} ); //from arrayEmployee[] 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);

1.3 Из коллекций

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

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

Аналогично получите поток из Map.

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);

1.4.Строитель.потока

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

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

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

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

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

2.1.Stream.iterate()

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

 Поток<Целое> infiniteEvenNumbers = Поток.iterate(0, n -> n + 2).limit(10);

2.2.Stream.generate()

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

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

3. Заключение

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

Исходный код на Github

Прокрутить вверх