web-dev-qa-db-fra.com

Comment convertir un Java 8 IntStream en une liste?

Je regarde les docs pour le IntStream, et je vois une méthode toArray, mais aucun moyen d'aller directement à un List<Integer>

Il existe sûrement un moyen de convertir une Stream en List?

257
Eric Wilson

IntStream.boxed transforme une IntStream en Stream<Integer>, que vous pouvez ensuite collect dans une liste:

theIntStream.boxed().collect(Collectors.toList())
497
Ian Roberts

Vous pouvez également utiliser mapToObj () sur un flux, qui prend une fonction IntFunction et renvoie un flux à valeur objet contenant les 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());
16
Ida Bucić

Vous pouvez utiliser les collections primitives disponibles dans Eclipse Collections et éviter la boxe.

MutableIntList list = 
    IntStream.range(1, 5)
    .collect(IntArrayList::new, MutableIntList::add, MutableIntList::addAll);

Remarque: je contribue aux collections Eclipse.

9
Nikhil Nanivadekar

Trouvez l'exemple suivant de recherche d'un carré de chaque élément int en utilisant Java 8: -

IntStream ints = Arrays.stream(new int[] {1,2,3,4,5});       
List<Integer> intsList = ints.map(x-> x*x)
          .collect(ArrayList<Integer>::new, ArrayList::add, ArrayList::addAll);
2
Vikash