java français référence - Comment convertir un flux Java 8 en un tableau?




4 Answers

La méthode la plus simple consiste à utiliser la toArray(IntFunction<A[]> generator) avec une référence de constructeur de tableau. Ceci est suggéré dans la documentation de l'API pour la méthode .

String[] stringArray = streamString.toArray(String[]::new);

Ce qu'il fait, c'est trouver une méthode qui prend un entier (la taille) comme argument, et retourne un String[] , ce qui est exactement ce que (l'une des surcharges de) new String[] fait.

Vous pouvez également écrire votre propre IntFunction :

Stream<String> stream = ...;
String[] stringArray = stream.toArray(size -> new String[size]);

Le but du IntFunction<A[]> generator est de convertir un entier, la taille du tableau, en un nouveau tableau.

Exemple de code:

Stream<String> streamString = Stream.of("a", "b", "c");
String[] stringArray = streamString.toArray(size -> new String[size]);
Arrays.stream(stringArray).forEach(System.out::println);

Impressions:

a
b
c
définition tutoriel

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




Vous pouvez créer un collecteur personnalisé qui convertit un flux en tableau.

public static <T> Collector<T, ?, T[]> toArray( IntFunction<T[]> converter )
{
    return Collectors.collectingAndThen( 
                  Collectors.toList(), 
                  list ->list.toArray( converter.apply( list.size() ) ) );
}

et une utilisation rapide

List<String> input = Arrays.asList( ..... );

String[] result = input.stream().
         .collect( CustomCollectors.**toArray**( String[]::new ) );



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());



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

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



Related