apis corriente java8 tirar tipos incompatibles: Object [] no se puede convertir a entero [] cuando la conversión de matriz de cadenas matriz de enteros

ZhaoGang:

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 Stringarroyo, a continuación, asignar Stringa Integerpor Integer::valueOfy recoger estos Integeren 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.

Ravindra Ranwala:

Usted tiene que pasar la referencia constructor para la matriz de enteros en la toArrayasí. De lo contrario se creará una Object[]por defecto.

Arrays.stream(valStrs).map(Integer::valueOf).toArray(Integer[]::new);

mapToIntcrea 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 toArraydevuelve 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

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=208914&siteId=1
Recomendado
Clasificación