Contar itens em uma lista

5 respostas
D

Ola pessoal,

Sou novo por aqui mas preciso de ajuda e creio que ela seja de um nível avançado (pelo menos pra mim é).
Estou desenvolvendo um pequeno sistema de gestão e dentro desse sistema ao cadastrar um cliente o mesmo vai sugerir o melhor produto a oferecer para esse cliente cadastrado no ato.
O processo é o seguinte, cada cliente tem um ramo (atividade econômica), ao clicar em salvar o método busca outros clientes que possuem o mesmo ramo e cria uma lista, pego essa lista e verifico quais clientes dentro dela que possuem vendas registradas e gero outra lista, a partir dessa ultima lista, busco os itens, e crio outra lista com todos os itens, ou seja produtos que foram vendidos.
O problema é para sugerir o melhor produto preciso sugerir o que mais vendeu, o que teve mais saída, e não consegui encontrar nada que conseguisse buscar dentro de uma lista e contar qual é o item que mais aparece dentro dela.

Alguém pode me ajudar? Vlw

5 Respostas

D

Camarada, acho que me perdi na segunda ou terceira lista que você cria.
Você nem precisa de tanta lista, só precisa de uma query bem feita.

D

Eu até concordo contigo cara, mas independente de ser tudo lista ou de uma query bem feita, a questao e q no final preciso montar ao menos uma lista para comparar qual produto foi mais vendido dentro das vendas feitas para aqueles clientes, e o que não estou conseguindo é algo para contar esses itens na lista, vendo qual deles que mais se repete, ou seja, o que mais foi vendido.

D

Camarada, já ouviu falar de SQL? De count? Você está montando lists pois este é o recurso que você tem. Se a tua única opção é usar uma faca, não tente atirar com ela, use-a para furar e cortar.
Como você faz para ler o conteúdo dos objetos que estão numa collection? Você itera sobre eles, correto? E se você não quer ler o conteúdo dos objetos, mas descobrir quantas vezes cada elemento está se repetindo numa lista?
O problema é que você quer pensar somente em coisas óbvias, não quer se dar ao trabalho de elaborar uma coisa mais adequada, talvez, possa até parecer mais complexa, mas seria bem mais simples.

Eu faria algo assim, talvez mais elaborado, mas isso já deve atender ao que você precisa.

Map<Produto, Integer> mapa = new HashMap<Produto, Integer>();
for(Produto p : duocentesimaListaQueCrieiNoPrograma){
   if(mapa.containsKey(p)){
      mapa.put(p, mapa.get(p) + 1);
   }else{
     mapa.put(p, 1);
   }
}
Iterator<Produto> it = mapa.keySet().iterator();
int mais = -1;
Produto maisVendido = null;
while(it.hasNext()){
   Produto p = it.next();
   if(mapa.get(p) > mais){
     maisVendido = p;
   }
}
}
D

Você pode resolver este problema de duas maneiras :

1 ) Crie uma query mais ou menos assim

SELECT count(produto) FROM tab_produto,tab_comparacao group by produto order by produto desc

Traduzindo, agrupe os valores iguais e some para saber qual produto é o que mais se repete na lista
Depois com o resultado você poderá fazer outras manipulações.

2 ) Com o java você colocará o resultado da query em uma lista e o único jeito de você obter qual valor se repete mais
você deverá percorrer a lista e comparar se existe dentro da própria lista valores iguais :

List<ClasseProduto> lista = new ArrayList<ClasseProduto>();
lista = "lista de resultados obtidos da query";

for(int i = 0 ; i < lista.size();i++){

    ClasseProduto produto = lista.get(i);
    int cont = 0;

    for(int j = 0 ; j < lista.size();i++){
       
       if(produto = lista.get(j)){
         cont++;
       }      

    }

    System.out.println("Produto : "+produto.getNome()+" - Repetiu : "+count);

}

Cara não sei se isso vai resolver qualquer coisa avisa ok?

D

diego_ms136:
Você pode resolver este problema de duas maneiras :

1 ) Crie uma query mais ou menos assim

SELECT count(produto) FROM tab_produto,tab_comparacao group by produto order by produto desc

Traduzindo, agrupe os valores iguais e some para saber qual produto é o que mais se repete na lista
Depois com o resultado você poderá fazer outras manipulações.

2 ) Com o java você colocará o resultado da query em uma lista e o único jeito de você obter qual valor se repete mais
você deverá percorrer a lista e comparar se existe dentro da própria lista valores iguais :

List<ClasseProduto> lista = new ArrayList<ClasseProduto>();
lista = "lista de resultados obtidos da query";

for(int i = 0 ; i < lista.size();i++){

    ClasseProduto produto = lista.get(i);
    int cont = 0;

    for(int j = 0 ; j < lista.size();i++){
       
       if(produto = lista.get(j)){
         cont++;
       }      

    }

    System.out.println("Produto : "+produto.getNome()+" - Repetiu : "+count);

}

Cara não sei se isso vai resolver qualquer coisa avisa ok?


O problema é que a lista pode possuir vários itens e, dentre eles, vários produtos diferentes.
Isso obrigaria a fazer vários fors encadeados, o que pode não ser uma boa idéia.
O correto é, para cada item, criar uma entrada em um map e, como a chave será o próprio produto, toda vez que uma ocorrência do mesmo for encontrada, ele soma ao valor que é correspondido pelo produto que é a chave.

Criado 6 de novembro de 2012
Ultima resposta 6 de nov. de 2012
Respostas 5
Participantes 3