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
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
O que seria o isso?
Você que dizer um método que retire os objetos repetidos da lista?
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>";
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.
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
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?
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.
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.
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
Esse código gera um mapa com a contagem das leituras:
List<Leitura> leiturasList = ServiceLocator.getLeituraService().readByLista(leitura.getDataLeitura()); // pega os dados do banco e coloca no list
Map<Leitura, Integer> contagemLeituras = new HashMap<Leitura, Integer>();
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ó.
OK Vini, muito obrigado.
Era isso mesmo que precisava.
Abraços.
Resolvido