Imaginei que poderia extrapolar a partir desta pergunta, mas não posso
Eu posso fazer
short[] shortarray = {0,1,2};
List<Short> shortList = new ArrayList<Short>();
for (Short s : shortarray) {
shortList.add(s);
}
Mas eu estou querendo saber como fazê-lo com fluxos.
List<Short> shortList = Arrays.stream(shortarray).boxed()
.collect(Collectors.toList());
não funciona, por exemplo, mas produz The method stream(T[]) in the type Arrays is not applicable for the arguments (short[])
mapToObj
e nãomapToInt
(ou simplesmap
)? usar um emIntStream
vez deStream<Integer>
deve ser preferível em quase todas as situações em que se está lidando com ints ou shorts primitivos.mapToInt
finalmente colete umaList<Integer>
instância, não aList<Short>
.List<Short>
, então o boxe não pode ser evitado.List<Short>
. Não que eu já tenha encontrado essa necessidade na vida real ...Por que ele não funciona com um curto primitivo []:
não há um tipo de fluxo curto. Os fluxos funcionam apenas para tipos não primitivos ou com IntStream, LongStream e DoubleStream .
Para funcionar, você teria que converter seus shorts em um tipo de dados com um Stream compatível, por exemplo Short, ou talvez em int para um IntStream (consulte a resposta de ernest_k).
fonte
Há outra maneira de converter uma matriz curta em uma coleção.
Veja abaixo o código de exemplo,
Short[] shortarray = {0,1,2}; List<Short> shortList1 = Arrays.asList(shortarray); shortList1.stream().forEach(aShort -> {System.out.println(aShort);});
Espero que isto ajude.
Obrigado Sandy
fonte
short[]
nãoShort[]
Arrays
classe considera apenas int, long, double ou qualquer tipo de objeto como parâmetro no momento. Portanto, a resposta simples "não é possível" no momento é tão curta quanto o parâmetro do método de fluxo da classe Arrays. Nota: Minha opinião enviada ao suporte paramétrico Arrays.stream é válida até o java 1.8 da revisão do meu documento.