Usando coleções list e set

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

Voce ja tentou usar HashMap ?

não,

mas HashMap permite duplicados não?

mas HashMap permite duplicados não?
[/quote]

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.

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!

[quote=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![/quote]

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

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.

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
    }
}