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: