Je regarde les documents pour le IntStream, et je vois une toArrayméthode, mais aucun moyen d'aller directement à unList<Integer>
Il y a sûrement un moyen de convertir un Streamen un List?
Je regarde les documents pour le IntStream, et je vois une toArrayméthode, mais aucun moyen d'aller directement à unList<Integer>
Il y a sûrement un moyen de convertir un Streamen un List?
Réponses:
IntStream::boxedIntStream::boxedtransforme un IntStreamen un Stream<Integer>, que vous pouvez ensuite collecttransformer en List:
theIntStream.boxed().collect(Collectors.toList())
La boxedméthode convertit les intvaleurs primitives d'un IntStreamen un flux d' Integerobjets. Le mot "boxe" nomme le processus de conversion int⬌ Integer. Voir Oracle Tutorial .
toList. Cela se fait en plaçant les éléments suivants parmi les importations du fichier: static import java.util.stream.Collectors.toList;. Ensuite, l'appel de collecte lit juste .collect(toList()).
Collectorsclasse dans Préférences -> Java -> Éditeur -> Assistant de contenu -> Favoris . Après cela, il vous suffit de taper toLiau hit Ctr + Space pour que l'IDE remplisse toListet ajoute l'importation statique.
boxed()partie
Vous pouvez également utiliser mapToObj () sur un Stream, qui prend une IntFunction et retourne un Stream à valeur objet composé des résultats de l'application de la fonction donnée aux éléments de ce flux.
List<Integer> intList = myIntStream.mapToObj(i->i).collect(Collectors.toList());
boxed()on délègue.
Vous pouvez utiliser les collections primitives disponibles dans les collections Eclipse et éviter la boxe.
MutableIntList list =
IntStream.range(1, 5)
.collect(IntArrayList::new, MutableIntList::add, MutableIntList::addAll);
Remarque: je suis un contributeur aux collections Eclipse.
MutableIntList list = IntLists.mutable.withAll(IntStream.range(1, 5))
Vous pouvez utiliser la méthode de collecte:
IntStream.of(1, 2, 3).collect(ArrayList::new, List::add, List::addAll);
En fait, c'est presque exactement ce que fait Java lorsque vous appelez .collect (Collectors.toList ()) sur un flux d'objets:
public static <T> Collector<T, ?, List<T>> toList() {
return new Collectors.CollectorImpl(ArrayList::new, List::add, (var0, var1) -> {
var0.addAll(var1);
return var0;
}, CH_ID);
}
Remarque: Le troisième paramètre n'est requis que si vous souhaitez exécuter une collecte parallèle; pour la collecte séquentielle, fournir uniquement les deux premiers suffira.