Usando coleções list e set

7 respostas
paulofernandesjr

Opa!

galera, tenho uma lista que vem do meu banco de dados com diversos produtos

porém ao exibir a tela eu não quero que os produtos sejam repetidos, justamente por isso criei o atributo quantidade

gostaria de saber como posso fazer para que ele não se duplique e some a quantidade do elemento

Set<ProdutoBean> prods = new MySetList<ProdutoBean>();
List<ProdutoBean> products = new VendaDAO().getProdutosComanda(numComanda);
Iterator<ProdutoBean> iter = products.iterator();
while(iter.hasNext()){
    ProdutoBean prod = iter.next();
    if(!prods.contains(prod) ) {
        prods.add(prod);
    } else {
        //somar a quantidade
    }
}

se onde eu coloquei o comentário eu conseguisse pegar o indice do que repetiu seria o ideal, porque ai é só somar

obrigado

7 Respostas

edmarr

Voce ja tentou usar HashMap ?

paulofernandesjr

não,

mas HashMap permite duplicados não?

ViniGodoy

mas HashMap permite duplicados não?

Não permite. Você faria uma map do produto -> soma.

Postei algo nesse sentido há alguns dias atrás, mas no lugar da soma acho que era um contador.

Tchello

Talvez você tenha que percorrer sua Collection verificando se esse item já está incluído, caso positivo incrementar a quantidade, caso contrário adiciona-lo a collection.
Garanta que equals e hashCode estejam corretamente sobrescritas nas suas classes.

Abraços!

paulofernandesjr

Tchello:
Talvez você tenha que percorrer sua Collection verificando se esse item já está incluído, caso positivo incrementar a quantidade, caso contrário adiciona-lo a collection.
Garanta que equals e hashCode estejam corretamente sobrescritas nas suas classes.

Abraços!

Isso eu sei, o meu problema esta sendo no incrementar a quantidade, pois eu não sei qual o meu produto

Tchello

Você não pode identifica-lo por um id, ou qualquer outro dado que seja único de um produto?
Implemente equals e hashCode com esse identificador unico e faça a comparação.

Abraços.

ViniGodoy

Vai ser algo mais ou menos assim:

Map<ProdutoBean, Integer> prods = new HashMap<ProdutoBean, Integer>();
List<ProdutoBean> products = new VendaDAO().getProdutosComanda(numComanda);

for (ProdutoBean prod : products) {
    if (!prod.containsKey(prod)) {
        prods.put(prod, 1); //Primeiro encontrado
    } else {
        int quant = prods.get(prod);
        prods.put(prod, quant + 1); //Soma 1
    }
}
Criado 24 de agosto de 2009
Ultima resposta 24 de ago. de 2009
Respostas 7
Participantes 4