Java Language Créer un flux


Exemple

Tous les java Collection<E> ont des méthodes stream() et parallelStream() partir desquelles un Stream<E> peut être construit:

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

Un Stream<E> peut être créé à partir d'un tableau en utilisant l'une des deux méthodes suivantes:

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

La différence entre Arrays.stream() et Stream.of() est que Stream.of() a un paramètre varargs, donc il peut être utilisé comme:

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

Il existe également des Stream primitifs que vous pouvez utiliser. Par exemple:

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

Ces flux primitifs peuvent également être construits à l'aide de la méthode Arrays.stream() :

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

Il est possible de créer un Stream partir d'un tableau avec une plage spécifiée.

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

Notez que tout flux primitif peut être converti en flux de type boîte en utilisant la méthode des boxed :

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

Cela peut être utile dans certains cas si vous souhaitez collecter les données, car le flux primitif ne possède aucune méthode de collect prenant un Collector comme argument.

Réutilisation des opérations intermédiaires d'une chaîne de flux

Le flux est fermé lorsque le terminal est appelé. Réutiliser le flux d'opérations intermédiaires, lorsque seul le fonctionnement du terminal ne fait que varier. nous pourrions créer un fournisseur de flux pour construire un nouveau flux avec toutes les opérations intermédiaires déjà configurées.

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[] tableaux int[] peuvent être convertis en List<Integer> aide de flux

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