Java Language Creazione di un flusso


Esempio

Tutti i Collection<E> s di java Collection<E> hanno i metodi stream() e parallelStream() da cui è possibile costruire uno Stream<E> :

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

È possibile creare uno Stream<E> da una matrice utilizzando uno dei seguenti due metodi:

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

La differenza tra Arrays.stream() e Stream.of() è che Stream.of() ha un parametro varargs, quindi può essere usato come:

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

Ci sono anche i primitivi Stream che puoi usare. Per esempio:

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

Questi stream primitivi possono anche essere costruiti usando il metodo Arrays.stream() :

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

È possibile creare un Stream da una matrice con un intervallo specificato.

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

Si noti che qualsiasi flusso primitivo può essere convertito in stream di tipo in scatola usando il metodo in boxed :

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

Questo può essere utile in alcuni casi se si desidera raccogliere i dati poiché il flusso primitivo non ha alcun metodo di collect che accetta un Collector come argomento.

Riutilizzo delle operazioni intermedie di una catena di flusso

Lo streaming viene chiuso quando viene chiamata un'operazione terminale. Riutilizzare il flusso di operazioni intermedie, quando solo il funzionamento del terminale è solo variabile. potremmo creare un fornitore di stream per costruire un nuovo stream con tutte le operazioni intermedie già configurate.

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[] array int[] possono essere convertiti in List<Integer> utilizzando gli stream

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