Pensé que podría extrapolar de esta pregunta pero no puedo
Por supuesto que puedo hacer
short[] shortarray = {0,1,2};
List<Short> shortList = new ArrayList<Short>();
for (Short s : shortarray) {
shortList.add(s);
}
Pero me pregunto cómo hacerlo con transmisiones.
List<Short> shortList = Arrays.stream(shortarray).boxed()
.collect(Collectors.toList());
no funciona, por ejemplo, pero produce The method stream(T[]) in the type Arrays is not applicable for the arguments (short[])
java
type-conversion
java-stream
mirar
fuente
fuente
mapToObj
y nomapToInt
(o simplemap
)? usar un enIntStream
lugar deStream<Integer>
debería ser preferible en casi todas las situaciones en las que se manejan entradas primitivas o cortos.mapToInt
finalmente recoger unaList<Integer>
instancia, no unList<Short>
.List<Short>
, por lo que no se puede evitar el boxeo.List<Short>
. No es que alguna vez encontré tal necesidad en la vida real ...En cuanto a por qué no funciona con un primitivo corto []:
no hay ningún tipo de secuencia de corto. Las secuencias solo funcionan para tipos no primitivos o con IntStream, LongStream y DoubleStream .
Para que funcione, tendría que convertir sus cortos a un tipo de datos con un Stream compatible, por ejemplo Short, o quizás int para un IntStream (consulte la respuesta de ernest_k).
fuente
Hay otra forma de convertir una matriz corta en una colección.
Ver abajo el código de muestra,
Short[] shortarray = {0,1,2}; List<Short> shortList1 = Arrays.asList(shortarray); shortList1.stream().forEach(aShort -> {System.out.println(aShort);});
Espero que esto ayude.
Gracias Sandy
fuente
short[]
noShort[]
Arrays
clase solo considera int, long, double o cualquier tipo de objeto como parámetros en este momento. Por lo tanto, la respuesta simple "no es posible" en este momento es tan corta como el parámetro del método de flujo de la clase Arrays. Nota: Mi opinión relacionada con el soporte de Arrays.stream param es válida hasta Java 1.8 desde mi revisión de documentación.