Quelle est la manière la plus simple / la plus courte de convertir un Java 8 Stream
en tableau?
java
arrays
java-8
java-stream
Empereur MC
la source
la source
Réponses:
La méthode la plus simple consiste à utiliser la
toArray(IntFunction<A[]> generator)
méthode avec une référence de constructeur de tableau. Ceci est suggéré dans la documentation API de la méthode .Ce qu'il fait, c'est trouver une méthode qui prend un entier (la taille) comme argument, et retourne a
String[]
, qui est exactement ce que fait (l'une des surcharges de)new String[]
.Vous pouvez également écrire le vôtre
IntFunction
:Le but de
IntFunction<A[]> generator
est de convertir un entier, la taille du tableau, en un nouveau tableau.Exemple de code:
Tirages:
la source
toArray(sz -> new String[sz])
donc je ne suis pas sûr que l'on puisse vraiment dire quelle doit ou doit être la solution.sz -> new String[sz]
crée une nouvelle fonction alors que la référence constructeur ne le fait pas. Cela dépend de combien vous appréciez le taux de récupération des ordures, je suppose.private
méthode , qui ne peut pas provoquer de désabonnement, et les deux versions doivent créer un nouvel objet. Une référence crée un objet qui pointe directement vers la méthode cible; un lambda crée un objet qui pointe vers celui généréprivate
. Une référence à un constructeur devrait toujours être plus performante faute d'indirection et d'optimisation plus facile des VM, mais le barattage n'a rien à voir avec cela.Si vous souhaitez obtenir un tableau d'entiers, avec des valeurs de 1 à 10, à partir d'un flux, IntStream est à votre disposition.
Ici, nous créons un Stream avec une méthode Stream.of et convertissons un Stream en IntStream en utilisant un mapToInt. Ensuite, nous pouvons appeler la méthode toArray d'IntStream.
Voici la même chose, sans le Stream, en utilisant uniquement l'IntStream
la source
Vous pouvez convertir un flux java 8 en un tableau à l'aide de ce simple bloc de code:
Mais expliquons les choses davantage, tout d'abord, créons une liste de chaînes remplies de trois valeurs:
Créez un flux à partir du tableau donné:
nous pouvons maintenant effectuer certaines opérations sur ce flux Ex:
et enfin le convertir en un tableau java 8 en utilisant ces méthodes:
Méthode 1-Classic (interface fonctionnelle)
2 -Lambda expression
3- Référence de méthode
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.
la source
Convertissez le texte en tableau de chaînes où séparez chaque valeur par une virgule et coupez chaque champ, par exemple:
la source
Vous pouvez créer un collecteur personnalisé qui convertit un flux en tableau.
et une utilisation rapide
la source
Collectors.groupingBy
afin de pouvoir mapper un attribut à des tableaux d'objets par valeur d'attribut. Cette réponse me donne exactement cela. Aussi @DidierL.L'utilisation de la
toArray(IntFunction<A[]> generator)
méthode est en effet un moyen très élégant et sûr de convertir (ou plus correctement, de collecter) un Stream en un tableau du même type de Stream.Cependant, si le type du tableau retourné n'est pas important, la simple utilisation de la
toArray()
méthode est à la fois plus simple et plus courte. Par exemple:la source
la source
Essayez-le en ligne: https://repl.it/@SmaMa/Stream-to-array
la source
la source
Vous pouvez le faire de plusieurs façons. Toutes les méthodes sont techniquement les mêmes, mais l'utilisation de Lambda simplifierait une partie du code. Disons que nous initialisons d'abord une liste avec String, appelons-la personnes.
Vous pouvez maintenant utiliser l'une des méthodes suivantes.
Utilisation de Lambda Expresiion pour créer un nouveau StringArray avec une taille définie.
String [] stringArray = stream.toArray (size-> new String [size]);
Utilisation directe de la référence de méthode.
String [] stringArray = stream.toArray (String [] :: new);
la source