Java Stream Collector

Java Stream Collector
O fluxo Java é a sequência de elementos de uma fonte que permite operações agregadas. Os elementos nos fluxos são calculados conforme necessário, mas não são armazenados. Por outro lado, a classe de utilitário JDK tem a classe de colecionadores que possui outros métodos fundamentais. A classe de colecionadores possui colecionadores pré -configurados para realizar as tarefas típicas de redução mutável. Os elementos do grupo de coletores de fluxo, com base em uma condição, reduzem os elementos para um único valor (como min, max, contagem ou total) ou acumule os elementos em coleções. A aula de colecionadores está incluída na aula de fluxo para que possa ser chamada em um fluxo após a execução de qualquer operação de filtragem ou mapeamento. É preciso um colecionador para adicionar os elementos do fluxo a uma coleção designada.

Exemplo 1:

O método collect () é usado para gerar a lista no exemplo a seguir. A implementação do coletor que cria uma nova lista dos elementos de entrada é retornada pelos colecionadores.Método Tolist ().

importar java.util.fluxo.Colecionadores;
importar java.util.Lista;
importar java.util.Arraylist;
classe perfume
int pid;
String pname;
flutuar pprice;
Public Perfume (int pid, string pname, float pprice)
esse.pid = pid;
esse.pname = pname;
esse.pprice = pprice;


classe pública Collectors1
public static void main (string [] args)
ListPerfumesList = new ArrayList ();
Perfumeslist.Adicionar (novo perfume (1, "Garden of Roses.", 5000F));
Perfumeslist.add (novo perfume (2, "terra do país das maravilhas da terra", 4000F));
Perfumeslist.Adicionar (novo perfume (3, "Berry Mellow.", 18000f));
ListPerfumespricelist =
Perfumeslist.fluxo()
.mapa (i-> i.pprice)
.Colete (colecionadores.listar());
Sistema.fora.println (perfumespricelist);

Definimos uma classe "perfumes", onde seus atributos são declarados como "pname", "pid" e "pprice". Em seguida, chamamos esses atributos dentro do construtor da função "perfumes" como um parâmetro e damos uma referência aos atributos atuais nesta função usando a palavra -chave "isto". Depois disso, construímos a classe principal "coletor1" do programa em que o principal programa deste exemplo é implantado. Aqui, definimos a interface da lista para a classe "Perfumes" para criar a lista na variável "Perfumeslist" declarada. A lista inclui os diferentes valores para o ID do perfume, nome e preço que são adicionados via função add (). Em seguida, geramos a lista de "Perfumepricelist", onde o "perfumelista" é chamado com o método Stream () para gerar o fluxo de valores de perfume. Depois disso, usamos o método map () para obter a lista de preços dos perfumes. A classe de colecionamento é implantada, o que leva os colecionadores.tolista () coletar os preços da lista de perfumes e imprimir essa lista que contém apenas os preços.

A lista de preços dos perfumes de classe é buscada usando os colecionadores.Método Tolist ().

Exemplo 2:

A classe de colecionador Java fornece diferentes operações para redução. O método junção () da classe Java Collectors é usado para combinar os vários itens de uma matriz de personagem ou string em um objeto específico. Esta técnica realiza isso através do fluxo. A aula de colecionador inclui vários sobrecargas de método de união.

importar java.util.Lista;
importar java.util.fluxo.Colecionadores;
classe pública Collectors2
public static void main (string [] args)
var myfriends = lista.de ("William", "James", "Noah", "Oliver",
"Lucas", "Liam", "Benjamin");
var jonslist = meus amigos.fluxo().Colete (colecionadores.juntando -se (","));
Sistema.fora.printf ("Lista de string ingressada: %s", junção);

Temos uma declaração variável de "meus amigos", que é chamada de lista.do () método para ter uma implementação imutável simples da classe de lista. A lista é fornecida com os diferentes itens de string. Depois disso, declaramos uma variável de “lista de junho” que primeiro cria o fluxo da lista de “meus amigos”. Em seguida, o método collect () chama o método colecionador ingressando (). Os colecionadores.O método ingressante () se junta à lista na forma de uma string usando a vírgula ", que é aprovada como um argumento. A lista ingressada da string é então impressa no console.

A saída que mostra a lista especificada é unida pelos colecionadores.Método ingressado ().

Exemplo 3:

O método estático da classe de colecionadores SummaringInt () retorna as estatísticas dos resultados obtidos após o conjunto de valores de entrada são fornecidos à implementação fornecida ToIntFunction ().

importar java.util.Matrizes;
importar java.util.Intsummarystatistics;
importar java.util.Lista;
importar java.util.fluxo.Colecionadores;
importar java.util.fluxo.Fluxo;
classe pública Collectors3
public static void main (string [] args)

Listnumlist = matrizes.aslist (13, 25, 18, 18);
Sistema.fora.println ("número IST -" + numList);
Streamnumstream = numList.fluxo();
IntsummaryStatisticsNumsMary = numStream.Colete (colecionadores.resumindont (i -> i));
Sistema.fora.println ("Estatísticas de resumo do fluxo de números -" + numsummary);

Declaramos o objeto de classe “numlist” da lista em que a lista de números inteiros é especificada usando o método aslist (). A lista de matriz inteiros é exibida com a declaração de impressão. Depois disso, criamos o fluxo daquela matriz de lista, invocando o método Stream () com o "numlist" na variável "numstream" da classe de fluxo. Em seguida, chamamos a classe IntsummaryStatistics e declaramos o objeto "numsummary" em que o método collect () obtém o resumo da lista de matrizes do método SummaringInt () e imprime esse resumo sobre a execução do programa.

O resumo estatístico da lista de matrizes anteriores é exibido no seguinte. Ele gera a soma, valor mínimo, valor máximo e valor médio.

Exemplo 4:

O método Groupingby () da classe de colecionadores de Java é usado para agrupar os itens de acordo com um atributo e armazenar os dados em um objeto de mapa. Além disso, o total de elementos que é dado como um parâmetro no fluxo também podem ser contados usando o método Counting () de colecionadores que é passado dentro do método Groupingby (). A função retorna um colecionador que aceita os itens do tipo T e coleta o número de elementos de entrada. O resultado do método Counting () é zero se não houver elementos.

importar java.util.Matrizes;
importar java.util.Lista;
importar java.util.Mapa;
importar java.util.função.Função;
importar java.util.fluxo.Colecionadores;
classe pública Collectors4
public static void main (string [] args)
Listar cidades =
Matrizes.aslist ("Phoenix", "Houston",
"Nova York", "Phoenix", "San Diego", "Houston");
MapMyMap =
Cidades.fluxo().coletar (
Colecionadores.groupingby (
Função.identidade (), colecionadores.continging ()));
Sistema.fora.println (mymap);

Criamos a lista de matrizes com o método aslist () e inserimos os nomes de cidades únicas e repetidas. Esta lista é declarada na variável "cidades" da classe de lista. Depois disso, temos uma interface de mapa que declara o objeto "mymap". Através desta interface do mapa, obtemos o fluxo da lista fornecida. Em seguida, utilizamos o método collect () que emprega ainda mais o método de classe de coletores (). O método Groupingby () agrupa os elementos da lista, identificando -os primeiro usando a função.Método Identify (). Em seguida, conta o número de elementos determinados usando o método Counting () da classe Collectors. Os elementos agrupados após o processamento através dos métodos de classe de coletores são exibidos pela instrução de impressão.

A lista a seguir é a forma do grupo. O elemento que é repetido na lista é agrupado com o valor de "2". O único elemento tem o valor de "1".

Exemplo 5:

A classe de colecionadores contém outra definição de método para a coleta e (). O método estático de coleta e o método da classe de colecionadores produz os resultados da operação do coletor. Então, a outra transformação de acabamento adicional é realizada.

importar java.util.Coleções;
importar java.util.Lista;
importar java.util.fluxo.Colecionadores;
importar java.util.fluxo.Fluxo;
classe pública Collectors5
public static void main (string [] args)
StreamstreamElements = Stream.de ("um", "dois", "três");
Listsynclist = streamlements.Colete (colecionadores.Collectinging e Then (
Colecionadores.Tolist (), Coleções :: SynchronizedList));
Sistema.fora.println (Synclist);


O fluxo da string é definido na variável "streamlements" da classe de fluxo. Em seguida, fornecemos o objeto Lista “Synclist” para sincronização da lista. O método de coleta é aplicado ao fluxo "Streamlements". O método collect () inclui o método colecionador e () que é empregado ainda mais com o método tolista (). No entanto, precisamos de uma lista imutável. Então, usamos o método não modificável () na lista gerada para retornar uma representação não modificável da lista. Em seguida, imprimimos a lista não modificável para o console.

A saída anterior do programa é executada na seguinte imagem do console Java:

Conclusão

O método Java Stream Collect () é empregado principalmente para adicionar os elementos do fluxo às coleções. Os itens no fluxo são processados ​​para um procedimento de redução mutável. São possíveis processos de redução seqüencial e simultâneos. No caso de um fluxo paralelo, ele lida com a sincronização. A classe de colecionadores oferece inúmeras implementações de colecionador para nos ajudar. Alguns dos métodos da classe coletora são implementados neste artigo.