0
votes

Comment collecter un flux dans une liste?

Je suis suite à quelques tutoriels sur java flux code> et il semble que tous ces tutoriels sont déjà obsolètes (ou évidemment, je ne l'obtiens pas)

Expected 3 arguments but found 1


2 commentaires

quelle version de java utilisez-vous pour la compilation?


Un peu de débogage aurait pu vous aider, mais comme vous l'avez dit, vous venez de fond c #, tout va bien.


3 Réponses :


7
votes

arrayes.stream (nouveau int [] {1,2,3,4,5,6}) code> crée un intestream code>, qui n'a pas de Collectez CODE> Méthode Prenant un seul paramètre ( Collecter CODE> Méthode de IntStream code> a la signature - r collection (fournisseur fournisseur, ObjintConsumer Accumulateur, Biconsumer Combinateur) Code>). Même si c'est le cas, tolist () code> ne serait pas applicable, car Java n'autorise pas list code> (c.-à-d. Liste code> s avec éléments primitifs). Les éléments d'une liste code> doivent être de type de référence.

Vous pouvez travailler avec le type d'integer entier code> à la place: P>

var array = Arrays.stream(new int[] {1,2,3,4,5,6})
                  .filter(x -> x > 3)
                  .toArray();


3 commentaires

Pouvez-vous parler un peu de la différence entre new Integer [] et new int []? Je viens d'un monde C # et je ne comprends pas pourquoi cela fonctionne maintenant


@Loading J'ai corrigé et développé ma réponse. Faites-moi savoir si quelque chose n'est pas clair.


J'ai supprimé ma réponse, car vous avez posté beaucoup plus rapidement.



3
votes

Arrays.stream (new int [] {1,2,3,4,5,6}) renverra un IntStream , pas un normal Flux .

Vous pouvez le convertir en Stream avec .boxed():

 var list = Arrays.stream(new int[] {1,2,3,4,5,6})
            .filter(x -> x > 3)
            .boxed()
            .collect(toList());


0 commentaires

-1
votes

Jetez un œil à ceci: À propos de collect (fournisseur, accumulateur, combinateur)

et cela résoudra votre problème :

ArrayList<Object> collect = Arrays.stream(new int[] { 1, 2, 3, 4, 5, 6 }).filter(x -> x > 3)
                .collect(ArrayList::new, ArrayList::add, ArrayList::addAll);

collect ici prend trois paramètres Fournisseur, BiConsumer, BiConsumer Vous n'en donniez qu'un, c'est pourquoi l'exception. J'espère que ça aide :)


1 commentaires

Cette collecte a les paramètres Supplier, ObjIntConsumer, BiConsumer .