utilisateur - Comment convertir un flux Java 8 en un tableau?




tutoriel talend pdf en français (5)

Convertir le texte en tableau de chaînes où séparer chaque valeur par une virgule, et couper chaque champ, par exemple:

String[] stringArray = Arrays.stream(line.split(",")).map(String::trim).toArray(String[]::new);

https://code.i-harness.com

Quel est le moyen le plus simple / le plus court pour convertir un Stream Java 8 en un tableau?


L'utilisation de la toArray(IntFunction<A[]> generator) est en effet un moyen très élégant et sûr de convertir (ou plus correctement, de collecter) un Stream dans un tableau du même type du Stream.

Cependant, si le type du tableau retourné n'est pas important, il suffit d'utiliser la méthode toArray() fois plus facile et plus court. Par exemple:

    Stream<Object> args = Stream.of(BigDecimal.ONE, "Two", 3);
    System.out.printf("%s, %s, %s!", args.toArray());

Si vous voulez obtenir un tableau d'ints, avec des valeurs de 1 à 10, à partir d'un flux, IntStream est à votre disposition.

Ici, nous créons une Stream avec une méthode Stream.of et convertissons un Stream en un IntStream en utilisant mapToInt. Ensuite, nous pouvons appeler la méthode toArray d'IntStream.

Stream<Integer> stream = Stream.of(1,2,3,4,5,6,7,8,9,10);
//or use this to create our stream 
//Stream<Integer> stream = IntStream.rangeClosed(1, 10).boxed();
int[] array =  stream.mapToInt(x -> x).toArray();

Voici la même chose, sans le Stream, en utilisant seulement l'IntStream

int[]array2 =  IntStream.rangeClosed(1, 10).toArray();

Vous pouvez convertir un flux java 8 en un tableau en utilisant ce simple bloc de code:

 String[] myNewArray3 = myNewStream.toArray(String[]::new);

Mais expliquons d'abord les choses, d'abord, créons une liste de chaînes remplies de trois valeurs:

String[] stringList = {"Bachiri","Taoufiq","Abderrahman"};

Créez un flux à partir du tableau donné:

Stream<String> stringStream = Arrays.stream(stringList);

nous pouvons maintenant effectuer quelques opérations sur ce flux Ex:

Stream<String> myNewStream = stringStream.map(s -> s.toUpperCase());

et enfin le convertir en un tableau Java 8 en utilisant ces méthodes:

Méthode 1-Classic (interface fonctionnelle)

IntFunction<String[]> intFunction = new IntFunction<String[]>() {
    @Override
    public String[] apply(int value) {
        return new String[value];
    }
};


String[] myNewArray = myNewStream.toArray(intFunction);

Expression 2 -Lambda

 String[] myNewArray2 = myNewStream.toArray(value -> new String[value]);

3- Référence de la méthode

String[] myNewArray3 = myNewStream.toArray(String[]::new);

Référence de la méthode Explication:

C'est une autre façon d'écrire une expression lambda qui est strictement équivalente à l'autre.


     Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5, 6);

     Integer[] integers = stream.toArray(it->new Integer[it]);






java-stream