Verificar Duplicidade em um ArrayList

5 respostas
anderson.agr

Boa tarde,

Pessoal é o seguinte, tenho uma classe GuiaEntrada, onde tenho notaId, prodId, quantidade, vlrUnitario, dtEntrada…
essa classe serve para incluir produtos em uma notafiscal de entrada…

Como estou incluindo esses produtos?

1º estou populando um ArrayList com a classe GuiaEntrada.

...
entradas.add(selectGuiaEntrada)
...

2º faço um ‘for’ e mando para o banco de dados.

até aqui blz…funciona, porém…

O que eu preciso?

quero que ao adcionar um produto nesse ArrayList, eu possa verificar se ele já existe lá dentro…
por exmplo não posso adcionar o mesmo produto duas vezes no mesmo ArrayList, porém meu prodId é do tipo Produto, uma classe chamada produto…onde tenho uma variavel prodId…

Pensei em fazer um ‘for’ para fazer essa pesquisa dentro do Array, só que não sei como verificar se getProdId(), existe dentro do Array.

Não sei se influencia mas estou utilizando JSF 1.2

5 Respostas

alberto_ribeiro

Boa tarde, cara não sei se te ajuda mas usa um HashMap dai a chave do hashmap seria o id do produto e o conteúdo o objeto, ai para cada input no hashmap verificar se já contém uma chave com o id do produto… tem metodo no hashmap para verificar se a chave ja existe…

E

Use uma estrutura de dados que não aceita dados repetidos, como um Set.

  • Você precisa dos dados não-repetidos e ordenados? Use um TreeSet.
  • Você precisa que os dados sejam não-repetidos mas mantenham a mesma ordem em que forem inseridos? Use um LinkedHashSet.
  • Você precisa que os dados sejam não-repetidos e não se incomoda que eles fiquem embaralhados? Use um HashSet.

Um TreeSet exige um Comparator, ou então que a classe implemente Comparable.

Um HashSet ou LinkedHashSet exige que a classe sobreponha o método hashCode().

alberto_ribeiro

Boa entanglement, fiz um teste aqui e funcionou usando um Set… porém deve-se sobreescrever o método equals também…

obs: para não duplicar os atributos de seu objeto devem conter os mesmos valores… se um atributo tiver um valor diferente vai duplicar…

anderson.agr

Use uma estrutura de dados que não aceita dados repetidos, como um Set.

  • Você precisa dos dados não-repetidos e ordenados? Use um TreeSet.
  • Você precisa que os dados sejam não-repetidos mas mantenham a mesma ordem em que forem inseridos? Use um LinkedHashSet.
  • Você precisa que os dados sejam não-repetidos e não se incomoda que eles fiquem embaralhados? Use um HashSet.

Um TreeSet exige um Comparator, ou então que a classe implemente Comparable.

Um HashSet ou LinkedHashSet exige que a classe sobreponha o método hashCode().

Obrigado…vou dar uma estudada sobre esses assuntos e assim que eu resolver eu volto dizendo o que aconteceu…

só mais uma pergunta com esses set eu irei conseguir verificar se somente o produto está repetido???

ViniGodoy

Em sets, não haverá objetos repetidos. Sempre que vc der um add num objeto que está lá, o novo objeto entra, e o objeto antigo sai.

E como o set sabe que os objetos são iguais? No caso do TreeSet, através do Comparator (que retorna 0, se dois objetos são iguais), e no caso dos outros, através do hashcode, que será igual para objetos iguais.

Criado 24 de novembro de 2009
Ultima resposta 24 de nov. de 2009
Respostas 5
Participantes 4