Mis siguientes códigos:
String[] valStrs=data.split(";");//data is a string
Integer[] vals=Arrays.stream(valStrs).map(Integer::valueOf).toArray();
es tirar:
error: incompatible types: Object[] cannot be converted to Integer[] [in Codec.java]
Integer[] vals=Arrays.stream(valStrs).map(Integer::valueOf).toArray();
Creo que estoy tratando de conseguir un String
arroyo, a continuación, asignar String
a Integer
por Integer::valueOf
y recoger estos Integer
en una matriz.
Entonces ¿por qué este error? Hice una búsqueda rápida y cann't encontrar la respuesta.
ACTUALIZAR:
Con el hecho de que int[] arr= Arrays.stream(valStrs).mapToInt(Integer::parseInt).toArray();
funciona perfectamente.
Usted tiene que pasar la referencia constructor para la matriz de enteros en la toArray
así. De lo contrario se creará una Object[]
por defecto.
Arrays.stream(valStrs).map(Integer::valueOf).toArray(Integer[]::new);
mapToInt
crea una IntStream
, y es toArray()
función devuelve una int[]
. Aquí está la declaración.
int[] toArray();
Por el contrario, map(Integer::valueOf)
crea una Stream<Integer>
y es toArray
devuelve un Object[]
menos que se especifique lo contrario. Aquí está la aplicación.
@Override
public final Object[] toArray() {
return toArray(Object[]::new);
}
La invocación del toArray(Integer[]::new)
llamará a este método sobrecargado.
public final <A> A[] toArray(IntFunction<A[]> generator)
He aquí un extracto de la documentación.
Devuelve una matriz que contiene los elementos de esta corriente, usando la función de generador proporcionado para asignar la matriz devuelta.
generador una función que produce una nueva matriz del tipo deseado y la longitud proporcionado