-1
votes

Comment convertir intestream en liste ?

J'ai un objet intestream que j'ai limité à 30 éléments et j'aime obtenir une liste de tous les int éléments dans le flux.

Merci d'avance


4 commentaires

Hey! Mais pourquoi liste ? S'il vous plaît poster ce que vous avez déjà essayé aussi.


Pourquoi la liste dans le titre? Partager un exemple d'entrée / sortie s'il vous plaît


Pourquoi avez-vous besoin de liste , sont toutes des numéros de distance [0-9]?


Le flux contient Int représentant des points de code Unicode (c'est-à-dire 1578, 1583, etc.) et je voudrais les convertir en leurs caractères respectifs puis créer un objet à chaîne. Bien sûr, je ne répudie pas le fait qu'il pourrait y avoir de meilleurs moyens de créer cet objet à chaîne et je suis ouvert aux idées.


3 Réponses :


3
votes

Vous pouvez mapper chaque int code> à un char code> puis collectez-vous dans une liste, cela se traduira par une liste de caractères donnée par leur code ASCII

List<Character> r = IntStream.range(50, 80).mapToObj(a -> (char) a).collect(Collectors.toList());
System.out.println(r); // [2, 3, 4, 5, 6, 7, 8, 9, :, ;, <, =, >, ?, @, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O]


4 commentaires

Vous ne voulez pas que le OP réponde à votre question en premier?


Vous pouvez même utiliser une référence de méthode pour la distribution si vous voulez être FANCY Char.Class :: Cast .


@Zabuzard Char est un type primitif mais la méthode Cast S'attend à un objet . Donc Char.Class :: Cast Ne travaille jamais sur quoi que ce soit. Lorsque vous le remplacez par caractère.Class :: CAST Il fonctionnerait pour caractère , mais ici, a -> (code) a est Effectuer un int à Char Conversion avant la boxe. Donc, même caractère.class :: casting échouerait car il serait casser le int à integer avant de tenter de le jeter sur caractère < / code>. En d'autres termes, non, vous ne pouvez pas remplacer cette distribution avec une référence de méthode.


@Holanger assez juste. Je suppose que cela fonctionnerait comme char.class est vraiment une chose. Mais tu as raison.



2
votes

De cette façon, vous pouvez faire cette action.

IntStream intStream = IntStream.of(1, 2, 3, 4, 5, 6, 7, 8, 9);
List<Character> characterList = intStream.mapToObj(i -> (char) i).collect(Collectors.toList());


0 commentaires

0
votes

Aussi,

List<Character> collect = IntStream.range(0, 30)
                .mapToObj(a -> (char) a)
                .collect(Collectors.toList());


5 commentaires

Comment est-ce différent de la réponse existante?


1. Clubbing 2. La gamme. Il n'a mentionné que 30 éléments bien que ce ne soit pas clair, je présume 0 .. 30.


J'ai un objet intrestre que j'ai limité à 30 éléments .. Alors, que restant était de mapper et de collecter et d'autres réponses le font aussi.


@ Parrotjack: En réalité, il s'agissait d'un nombre infini d'entiers dans la gamme de 0 à 0xFFFF que j'ai tronqué en appliquant IntStream.limit (30L). J'ai eu une vieille mise en œuvre de la mode qui produisait la liste mais je suis de retour à Java coding après 17 ans et je vois beaucoup de choses ont été ajoutées à la langue (c'est-à-dire Lambda) et j'essayais de comprendre comment faire cela à Lambda comme M. Zerehpoush illustré. La nuit dernière, je suis arrivé à proximité de cela, mais je ne pouvais pas comprendre la partie coulée et toutes les recherches de Google n'ont pas réussi à produire des résultats.


Merci à tous pour vos échantillons d'extraits. Il a clarifié l'ambiguïté pour moi, je dois juste trouver une bonne source d'apprentissage de Lambda. Les documents Oracle Java ne sont certainement pas un bon candidat.