Tenho na classe Main uma static public ArrayList lista.
A duvida é, Como faço para checar se o codigo (int) que vai ser cadastrado já existi na List?
Ex)
1- Teclado
2- Mouse
|–> Essa é minha lista, ai vou cadastrar um novo produto e informo o codigo 2. Como faço pra detectar que esse codigo já existe? Eu tentei usar lista.getcodigo == codigo, mas não consigo passar pra lista os metodos da minha outra classe. =/
Mas para que a comparação seja feita através do atributo da comparação “codigo” você deve reescrever o metodo “equals” no seu objeto Produto.
Algo como:
Zeed01, o contais entao simula o for comparado ao intem passado como argumento?
Abraços
Zeed01
Bom dia Galera !
Sim… outra opção seria fazer um for e comparar cada item do arraylist, mas o contains ja faz isso pra você.
[]s
eberson_oliveira
Bom dia a todos.
A menos que seja obrigatório o uso de ArrayList, sugiro que utilize um Set, pois ele não permite duplicatas. Dessa forma não vai ser preciso fazer for e nem verificar com contains... é só adicionar... se o objeto já existir na lista o novo não será adicionado e o método retornará false, do contrário retornará true.
Set<Produto>lista=newHashSet<Produto>(); //ou,conformepropostoabaixopelocolegaSet<Produto>lista=newTreeSet<Produto>();
.
.
.
if(lista.add(produto)){
System.out.println("adicionou");
}
else{
System.out.println("já existe um objeto semelhante a este na lista");
}
Espero ter ajudado.
Esqueci de mencionar.... o método equals e hashCode deverão ser implementados para que a lista funcione da forma esperada com o desempenho esperado.
[]
Éberson
ViniGodoy
Se usar um TreeSet fica ainda melhor, já que a lista no final ainda sai ordenada. Entretanto pra usar o HashSet a classe deve implementar corretamente o hashCode e o equals e pra usar o TreeSet a classe deve ser Comparable.
eberson, você escreveu de tipar os set:
Set<Produto>produtos=newHashSet<Produto>();
eberson_oliveira
[quote=ViniGodoy]Se usar um TreeSet fica ainda melhor, já que a lista no final ainda sai ordenada. Entretanto pra usar o HashSet a classe deve implementar corretamente o hashCode e o equals e pra usar o TreeSet a classe deve ser Comparable.
eberson, você escreveu de tipar os set:
Set<Produto>produtos=newHashSet<Produto>();
Vixi… foi mal…
Acabei escrevendo direto na resposta e esquecendo desse detalhe.
Valew
[]s
Éberson
edmarr
eberson_oliveira:
Bom dia a todos.
A menos que seja obrigatório o uso de ArrayList, sugiro que utilize um Set, pois ele não permite duplicatas. Dessa forma não vai ser preciso fazer for e nem verificar com contains... é só adicionar... se o objeto já existir na lista o novo não será adicionado e o método retornará false, do contrário retornará true.
Set<Produto>lista=newHashSet<Produto>(); //ou,conformepropostoabaixopelocolegaSet<Produto>lista=newTreeSet<Produto>();
.
.
.
if(lista.add(produto)){
System.out.println("adicionou");
}
else{
System.out.println("já existe um objeto semelhante a este na lista");
}
Espero ter ajudado.
Esqueci de mencionar.... o método equals e hashCode deverão ser implementados para que a lista funcione da forma esperada com o desempenho esperado.
[]
Éberson
Muito bom comentario Eberson,
Enfim você pode usar algumas classes que implementam Set , vc pode trabalhar sem duplicata na sua lista.
I
igones
Vlws pela ajuda, só que tenho +1 duvida.
Ex) [Codigo/Nome]:
13 Camisa
21Shorts
(…)
9 Calça jeans |-> Essa é minha ArrayList lista e eu quero criar um metodo para remover o produto passando o codigo do produto *Só consegui fazer passando a posição =/
Obrigado! :-o
D
dalirosa
igones:
Vlws pela ajuda, só que tenho +1 duvida.
Ex) [Codigo/Nome]:
13 Camisa
21Shorts
(…)
9 Calça jeans |-> Essa é minha ArrayList lista e eu quero criar um metodo para remover o produto passando o codigo do produto *Só consegui fazer passando a posição =/
Obrigado! :-o
Eu acredito que o ArrayList não seja o mais indicado para isso.
Dê uma pesquisada sobre Set, acho que vai atender melhor sua necessidade
eberson_oliveira
igones:
Vlws pela ajuda, só que tenho +1 duvida.
Ex) [Codigo/Nome]:
13 Camisa
21Shorts
(…)
9 Calça jeans |-> Essa é minha ArrayList lista e eu quero criar um metodo para remover o produto passando o codigo do produto *Só consegui fazer passando a posição =/
Obrigado! :-o
Primeira coisa a se fazer… troque seu ArrayList por um Set como foi mostrado acima. Não esquecendo que para isso deverá implementar equals e hashCode no seu objeto Produto (Se estiver utilizando uma IDE, ela tem opções para implementar este método para você). Provavelmente o que define um produto deve ser o código, logo ele será o valor a ser comparado no equals; assim, acredito que você poderia criar um objeto apenas com o código do produto a ser removido e mandar remover da lista.
Não tenho certeza de que é a melhor solução. Mas deve funcionar no seu caso.