Looking for java Keywords? Try Ask4Keywords

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


пример

Все java Collection<E> имеют методы stream() и parallelStream() из которых можно построить Stream<E> :

Collection<String> stringList = new ArrayList<>();
Stream<String> stringStream = stringList.parallelStream();

Stream<E> может быть создан из массива с использованием одного из двух методов:

String[] values = { "aaa", "bbbb", "ddd", "cccc" };
Stream<String> stringStream = Arrays.stream(values);
Stream<String> stringStreamAlternative = Stream.of(values);

Разница между Arrays.stream() и Stream.of() заключается в том, что Stream.of() имеет параметр varargs, поэтому его можно использовать как:

Stream<Integer> integerStream = Stream.of(1, 2, 3);

Есть также примитивные Stream которые вы можете использовать. Например:

IntStream intStream = IntStream.of(1, 2, 3);
DoubleStream doubleStream = DoubleStream.of(1.0, 2.0, 3.0);

Эти примитивные потоки также могут быть построены с использованием Arrays.stream() :

IntStream intStream = Arrays.stream(new int[]{ 1, 2, 3 });

Можно создать Stream из массива с указанным диапазоном.

int[] values= new int[]{1, 2, 3, 4, 5};
IntStream intStram = Arrays.stream(values, 1, 3);

Обратите внимание, что любой примитивный поток может быть преобразован в поток с коротким типом, используя метод boxed :

Stream<Integer> integerStream = intStream.boxed();

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

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

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

Supplier<Stream<String>> streamSupplier = () -> Stream.of("apple", "banana","orange", "grapes", "melon","blueberry","blackberry")
.map(String::toUpperCase).sorted();

  streamSupplier.get().filter(s ->   s.startsWith("A")).forEach(System.out::println);

// APPLE

  streamSupplier.get().filter(s -> s.startsWith("B")).forEach(System.out::println);

  // BANANA
  // BLACKBERRY
  // BLUEBERRY

int[] массивы могут быть преобразованы в List<Integer> с использованием потоков

int[] ints = {1,2,3};
List<Integer> list = IntStream.of(ints).boxed().collect(Collectors.toList());