Itens que se repete em um list

13 respostas
U

Olá pessoal, boa tarde.

Existe alguma função que varra uma lista e pega o número de iterações que são repetidas?

Obrigado

13 Respostas

Hebert_Coelho

O que seria o isso?

daveiga

Você que dizer um método que retire os objetos repetidos da lista?

U

Olá pessoal, obrigado pela resposta rápida.
Estou com o seguinte problema:
Estou populando um gráfico com as seguintes informações(quantidade de produtos que foram produzidos e o nome do produto) e ao invés de pegar as interações(itens que se repete) e colocar em cada coluna do gráfico, está acontecendo o seguinte: Tenho 10 produtos fabricados onde 5 é do produto A e 5 do produto B.
Gostaria em que cada coluna do gráfico ficasse o nome do produto e a sua quantidade, porém ele esta exibindo para mim 10 colunas onde 5 mostra o produto A e 5 mostra o produto B ao invés de duas.

Fiz dessa forma:
Gostaria de pegar os itens que se repete em um list e colocar em cada coluna do gráfico.

Leitura leitura = new Leitura();
List<Leitura> leiturasList = ServiceLocator.getLeituraService().readByLista(leitura.getDataLeitura()); // pega os dados do banco e coloca no list
for (Leitura i : leiturasList) {
                        strXML += "<set name='" + i.getObjeto().getProduto().getNomeProduto() + "' value='" + i.getObjeto().getProduto().getId() + "'"
                                + " color='AFD8F8'/>";

                    }
                    strXML += "</graph>";
Hebert_Coelho

Se o seu problema é item repetido você pode eliminar utilizando um Set ao invés de um listo.

Só não esqueça que sua classe tem que implementar equals/hashCode.

U

Sim, sim já fiz isso.
Porém a cada vez que ele passa pelo for ele terá que montar uma coluna no grafico com os itens que se repete e nome dele. Entendeu?
Obrigado

Hebert_Coelho

Você já fez? No seu método você está utilizando List e não Set.

Seu problema então é de lógica e não dúvida técnica de Java, é isso?

U

Isso mesmo.
Só gostaria de saber o que fiz de errado no meu for ou o que poderia fazer para obter o resultado que eu quero.

U

Favor, dê uma olhada nos gráficos que vc poderá ter uma ideia do que esta acontecendo.
Obrigado pela ajuda.


U

Gráfico que esta sendo gerando.


D

Antes de popular o gráfico você deve verificar quais são os dados repetidos, usando o método equals da sua classe, neste caso Leitura.

U

valeu diego pela força.
Conseguindo posto aki a solução, caso alguém tenha a mesma dúvida, aki ficará o caminho das pedras.
Obrigado.
Abraços

ViniGodoy

Esse código gera um mapa com a contagem das leituras:

List&lt;Leitura&gt; leiturasList = ServiceLocator.getLeituraService().readByLista(leitura.getDataLeitura()); // pega os dados do banco e coloca no list Map&lt;Leitura, Integer&gt; contagemLeituras = new HashMap&lt;Leitura, Integer&gt;(); for (Leitura leitura : leiturasList) { if (!contagemLeituras.containsKey(leitura)) contagemLeituras.put(leitura, 0); contagemLeituras.put(leitura, contagemLeituras.get(leitura) + 1); }

É importante que a leitura tenha os métodos equals e hashCode devidamente implementados.

Além disso, faça as concatenações dentro de um for usando um StringBuilder. O += da classe String é terrívelmente ineficiente.

De método pronto, existe o Collections.frequency(), mas ele geralmente só é eficiente quando você quer saber o número de ocorrências de um item só.

U

OK Vini, muito obrigado.
Era isso mesmo que precisava.
Abraços.

Resolvido

Criado 26 de dezembro de 2011
Ultima resposta 27 de dez. de 2011
Respostas 13
Participantes 5