Como agrupar coleções no Java
Neste tutorial veremos como agrupar coleções no Java.

Neste breve tutorial irei mostrar como agrupar coleções no Java, para realizar o agrupamento de elementos de uma coleção em Java, utilizaremos métodos do pacote stream do Java.
Para nossa implementação será utilizado o tipo de coleção List do Java e para iniciar vamos começar importando as classes que serão utilizadas no tutorial:
import java.util.Arrays;import java.util.List;import java.util.Map;import java.util.function.Function;import java.util.stream.Collectors;
Feito isto, vamos criar a lista que será agrupada, vamos criar uma lista de Strings contendo os nomes das linguagens de programação.
List<String> linguagens = Arrays.asList(
"Java", "Python", "JavaScript", "Java", "JavaScript", "Python", "Java");
Pronto, já podemos iniciar o agrupamento da coleção, no exemplo abaixo será usado a função groupingBy da classe Collectors para agruparmos os elementos repetidos na lista e por consequência trazer a quantidade de vezes que esse elemento se repete, veja o código abaixo:
Map<String, Long> resultado = linguagens.stream().collect( Collectors.groupingBy( Function.identity(), Collectors.counting() ));Uma breve explicação do código acima, primeiro pegamos a nossa variável (linguagem) contendo uma lista de Strings e percorremos cada item usando o método stream() e logo após é utilizado a função collect() passando as funções o groupingBy para agrupar e as opções indentity() para identificar cada elemento e o counting() para contar a quantidade de vezes que cada elemento aparece dentro da lista;
Ao finalizar a execução do loop do stream o retorno será guardado em um map que conterá a identificação do elemento da Lista(linguagem) e o total de vezes que cada elemento ocorre dentro da lista.
E usaremos o System.out.println, para exibir o resultado do agrupamento:
System.out.println("List Resultado Agrupado:");System.out.println(resultado);
Ao rodar o código acima será gerado na tela do terminal a seguinte saída:
List Resultado Agrupado:{Java=3, JavaScript=2, Python=2}
Está é uma forma simples e rápida de como podemos agrupar uma coleção em Java usando apenas funções nativas presentes no stream do Java.
E aqui está todo código implementado:
import java.util.Arrays;import java.util.List;import java.util.Map;import java.util.function.Function;import java.util.stream.Collectors;public class ColecoesGroupingBy { public static void main(String args[]){ List<String> linguagens = Arrays.asList( "Java", "Python", "JavaScript", "Java", "JavaScript", "Python", "Java" ); Map<String, Long> resultado = linguagens.stream().collect( Collectors.groupingBy( Function.identity(), Collectors.counting() ) ); System.out.println("List Resultado Agrupado:"); System.out.println(resultado); }}
Segue abaixo um pequeno Vídeo demonstrando do processo e implementação do código usado neste tutorial:
Abaixo segue link do Github com o código fonte que utilizei para implementação deste tutorial:
