Eu estava tentando converter uma matriz int para listar e tomei o caminho desconhecido de usar Java 8 Stream e veio com essa
Arrays.stream(arr).boxed().collect(Collectors.toList());
Eu ainda tenho dificuldade em compreender plenamente essa linha, em sua maioria,
Porque é que
Collectors.toList()
neste caso retorna umaArrayList<Integer>
implementação deList
interface? Por que nãoLinkedList<Integer>
ou qualquer outra classe genérica em conformidade comList
interface? Eu não consigo encontrar nada sobre isso, exceto por uma breve menção de ArrayList aqui , na seção Notas API.O que faz o painel à esquerda da média? Obviamente, é o tipo de retorno genérico ( no meu código aqui). E eu acho que é o argumento de tipo genérico do método, mas como eles são especificados? Olhei para Collector interface de doc e não foi capaz de absorvê-lo.
Stream.collect()
R
ArrayList<Integer>
<R, A>
É uma implementação padrão.
ArrayList
é usado, porque é melhor na maioria dos casos de uso, mas se não é adequado para você, você sempre pode definir o seu próprio coletor e fornecer fábrica paraCollection
que você deseja:Arrays.stream(arr).boxed().collect(toCollection(LinkedList::new));
Sim,
A
eR
são parâmetros genéricos deste método,R
é o tipo de retorno,T
é o tipo de entrada eA
é um tipo intermediário, que aparece em todo o processo de recolha de elementos (não pode ser visível e não diz respeito a esta função). O início doCollector
javadoc 's define esses tipos (eles são consistentes em todo o doc):T - o tipo de elementos de entrada para a operação de redução
A - o tipo de acumulação mutável da operação de redução (frequentemente escondido como um detalhe de implementação)
R - o tipo de resultado da operação de redução