Vous pouvez créer des méthodes d'assistance qui convertiraient une liste (tableau) de type T
en liste (tableau) de type en U
utilisant l' map
opération sur stream
.
//for lists
public static <T, U> List<U> convertList(List<T> from, Function<T, U> func) {
return from.stream().map(func).collect(Collectors.toList());
}
//for arrays
public static <T, U> U[] convertArray(T[] from,
Function<T, U> func,
IntFunction<U[]> generator) {
return Arrays.stream(from).map(func).toArray(generator);
}
Et utilisez-le comme ceci:
//for lists
List<String> stringList = Arrays.asList("1","2","3");
List<Integer> integerList = convertList(stringList, s -> Integer.parseInt(s));
//for arrays
String[] stringArr = {"1","2","3"};
Double[] doubleArr = convertArray(stringArr, Double::parseDouble, Double[]::new);
Notez qui
s -> Integer.parseInt(s)
pourrait être remplacé par
Integer::parseInt
(voir les
références de méthode )
Lists.transform()
.la source
Les méthodes d'assistance de la réponse acceptée ne sont pas nécessaires. Les flux peuvent être utilisés avec des lambdas ou généralement raccourcis à l'aide de références de méthode . Les flux permettent des opérations fonctionnelles.
map()
convertit les éléments et /collect(...)
outoArray()
encapsule le flux dans un tableau ou une collection.Le discours (vidéo) de Venkat Subramaniam l' explique mieux que moi.
1 Convertir
List<String>
enList<Integer>
2 Convertir
List<String>
enint[]
3 Convertir
String[]
enList<Integer>
4 Convertir
String[]
enint[]
5 Convertir
String[]
enList<Double>
6 (bonus) Convertir
int[]
enString[]
Bien sûr, beaucoup plus de variations sont possibles.
Voir également la version Ideone de ces exemples . Peut cliquer sur fork, puis exécuter pour exécuter dans le navigateur.
la source
EDIT: Comme indiqué dans les commentaires, il s'agit d'une version beaucoup plus simple: De
Arrays.stream(stringArray).mapToInt(Integer::parseInt).toArray()
cette façon, nous pouvons ignorer toute la conversion vers et depuis une liste.J'ai trouvé une autre solution en une ligne, mais elle est encore assez lente (prend environ 100 fois plus de temps qu'un cycle for - testé sur un tableau de 6000 0)
Ce que cela fait:
la source
Arrays.stream(stringArray).mapToInt(Integer::parseInt).toArray()
Pour la liste:
Pour Array:
la source
Vous pouvez aussi utiliser,
la source
Je ne l'ai pas trouvé dans les réponses précédentes, donc, avec Java 8 et les flux:
Convertir
String[]
enInteger[]
:la source
De plus - contrôlez quand le tableau de chaînes n'a pas d'éléments:
la source
J'ai utilisé maptoInt () avec l'opération Lambda pour convertir une chaîne en entier
la source
Arrays.toString (int []) fonctionne pour moi.
la source