Научитесь создавать потоки примитивов и объектов в Java, используя некоторые наиболее популярные способы. Мы научимся создавать как конечные, так и бесконечные потоки.
- Создание Конечных Потоков. Пустой поток. Из значений. Из коллекций. Stream.Builder
- Создание Бесконечных Потоков. Stream.iterate(). Поток.генерировать()
- Заключение
Создание Конечных Потоков
Пустой поток
Вы можете использовать метод 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.
- iterate(seed, function) – принимает два параметра – начальное значение, которое является первым членом в потоке, и функцию для получения значения следующего элемента в потоке. Мы можем ограничить поток с помощью метода limit().
- 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 элементов из бесконечного потока.