Научитесь создавать потоки примитивов и объектов в 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 элементов из бесконечного потока.