convertir séparées par des virgules chaîne à la liste sans intermédiaire conteneur
J'ai besoin de convertir séparées par des virgules chaîne à la liste d'entiers. Par exemple si j'ai de la chaîne suivante
String numbersArray = "1, 2, 3, 5, 7, 9,";
Est-il un moyen de le convertir à la fois à List<Integer>
?
Maintenant, je ne vois qu'un moyen de le faire.
List<String> numbers = Arrays.asList(numbersArray.split(","));
Et puis
List<Integer> numbersInt = new ArrayList<>();
for (String number : numbers) {
numbersInt.add(Integer.valueOf(nubmer));
}
Je suis curieux de savoir est-il une façon de manquer une partie avec List<String>
et lors de la première apparition de la convertir en List<Integer>
Réponse courte: non, sauf si vous écrivez une méthode de le faire. Plus: avec Java 8, vous pouvez utiliser les résultats intermédiaires et les flux de carte à
Il est assez déroutant pour appeler la chaîne sérialisée forme des nombres
CodesInChaos, c'était juste pour l'exemple
List<Integer>
.Il est assez déroutant pour appeler la chaîne sérialisée forme des nombres
numbersArray
.CodesInChaos, c'était juste pour l'exemple
OriginalL'auteur user3127896 | 2014-12-22
Vous devez vous connecter pour publier un commentaire.
Si vous êtes à l'aide de Java 8, vous pouvez:
Si non, je pense que votre approche est la meilleure option disponible.
Pattern.compile(",").splitAsStream(numbersArray) …
sinon, en fait, le tableau est, une sorte de récipient...OriginalL'auteur Maroun
À l'aide de java 8 Flux:
OriginalL'auteur Mohsen Kashi
J'aime vraiment @MarounMaroun de la réponse, mais je me demande si il est même préférable d'utiliser la
Arrays.stream
-méthode au lieu deArrays.asList
.Cette question discute davantage et résume en tant que tel:
OriginalL'auteur wassgren
Cela fonctionne, tant que le
String
se termine par une virgule, comme votre exemple.Cependant, il est assez inutile, car sur ma machine c'est environ 2 fois plus lent que l'original.
Cette solution suivante, en revanche, est étonnamment rapide. Je l'ai testé sur des listes de 50000 entiers obtenus à l'aide de
Math.abs(random.nextInt())
et il était environ 4 fois plus rapide que l'original.Et c'est environ deux fois plus rapide encore:
.parseInt
. Alors que c'est intéressant, ce n'est probablement pas une bonne idée de l'utiliser dans le code de production.Je n'ai pas pensé à l'utiliser dans le code de production! Je viens de traiter ce un un intéressant exercice académique dans l'écriture d'un algorithme aussi rapide que possible. Vous pourriez adapter pour le faire fonctionner pour les négatifs. Je n'ai pas de java 8 donc je ne peux pas tester ces solutions, mais de tous les autres, l'
switch
est de loin le plus rapide ici. Et apparemment, si vous utiliser la réflexion pour accéder à lachar
tableau à l'appui d'uneString
vous pouvez doubler la vitesse de l'itération sur uneString
. Voir cette question - stackoverflow.com/questions/8894258/...OriginalL'auteur Paul Boddington
Si vous êtes prêt à utiliser Google Goyave ( https://code.google.com/p/guava-libraries/ ) , splitter est votre ami
ou, vous pouvez utiliser quelque chose de similaire à votre approche originale et:
OriginalL'auteur David Soroko
Si vous n'êtes pas sur java8, alors vous pouvez utiliser Goyave
@Maroun a mentionné pour Java8 vous pouvez utiliser les Flux.
Désolé de ne pas obtenir de vous. Tu veux dire qui est similaire à kumar réponse?
Salut @BandiKishore, non, j'étais juste en se référant à la grande Kishore Kumar! 🙂 cheers ... merci pour la réponse, BTW
oh, hahahaaa. bon sens de l'humour. merci 🙂
OriginalL'auteur Bandi Kishore
Je pense que en dessous de morceau de code pourrait être utile pour vous.
Au lieu d'utiliser le Système..println l'ajouter à la liste d'Entiers.
Ici nous ne sommes pas traversée par le biais de la liste complète plusieurs fois, au lieu de nous traverse qu'une seule fois et de les stocker dans un tableau.
OriginalL'auteur santosh Kumar