Puede crear métodos auxiliares que conviertan una lista (matriz) de tipo Ten una lista (matriz) de tipo Uutilizando la mapoperación on 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);
}
Y utilícelo así:
//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);
Tenga en cuenta que
s -> Integer.parseInt(s)podría reemplazarse con
Integer::parseInt(consulte las
referencias de métodos )
Lists.transform().fuente
Los métodos auxiliares de la respuesta aceptada no son necesarios. Los flujos se pueden utilizar con lambdas o, por lo general, se pueden acortar mediante referencias de método . Los flujos permiten operaciones funcionales.
map()convierte los elementos ycollect(...)otoArray()envolver la parte posterior de flujo de carga en una matriz o colección.La charla de Venkat Subramaniam (video) lo explica mejor que yo.
1 Convertir
List<String>aList<Integer>2 Convertir
List<String>aint[]3 Convertir
String[]aList<Integer>4 Convertir
String[]aint[]5 Convertir
String[]aList<Double>6 (bonificación) Convertir
int[]aString[]Por supuesto, son posibles muchas más variaciones.
Consulte también la versión de Ideone de estos ejemplos . Puede hacer clic en la bifurcación y luego ejecutar para ejecutar en el navegador.
fuente
EDITAR: Como se señaló en los comentarios, esta es una versión mucho más simple: de
Arrays.stream(stringArray).mapToInt(Integer::parseInt).toArray()esta manera podemos omitir toda la conversión hacia y desde una lista.Encontré otra solución de una línea, pero sigue siendo bastante lenta (toma alrededor de 100 veces más que un ciclo for; probado en una matriz de 6000 0)
Que hace esto:
fuente
Arrays.stream(stringArray).mapToInt(Integer::parseInt).toArray()Para la lista:
Para matriz:
fuente
También puedes usar,
fuente
No lo encontré en las respuestas anteriores, entonces, con Java 8 y streams:
Convertir
String[]aInteger[]:fuente
Además, controla cuando la matriz de cadenas no tiene elementos:
fuente
Usé maptoInt () con la operación Lambda para convertir la cadena a Integer
fuente
Arrays.toString (int []) funciona para mí.
fuente