Como entender este método Java 8 Fluxo recolher ()?

user3207158:

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,

  1. Porque é que Collectors.toList()neste caso retorna uma ArrayList<Integer>implementação de Listinterface? Por que não LinkedList<Integer>ou qualquer outra classe genérica em conformidade com Listinterface? Eu não consigo encontrar nada sobre isso, exceto por uma breve menção de ArrayList aqui , na seção Notas API.

  2. 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.digite descrição da imagem aqui Stream.collect()RArrayList<Integer><R, A>

Andronicus:
  1. É 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 para Collectionque você deseja:

    Arrays.stream(arr).boxed().collect(toCollection(LinkedList::new));
    
  2. Sim, Ae Rsão parâmetros genéricos deste método, Ré o tipo de retorno, Té o tipo de entrada e Aé 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 do Collectorjavadoc '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

Acho que você gosta

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