Como verificar se um dado 'id' está contido em uma coleção
7 respostas
asclows
Tenho uma Classe:
publicclassCategoria{privateLongid;privateStringdescricao;privateStringgrupo;// getters e setters}
Tenho um List categorias que representa as opções que usuário tem para selecionar em um formulário. No entanto, para cadastros já salvos anteriormente preciso identificar quais categorias deverão vir com checkbox marcado pois as categorias já selecionadas pelo usuário fazem parte de List experiencias que é atributo da classe Curriculo.
Como faço então para verificar se o id de cada categoria da List categorias está contido no List experiencias? Existe algum método como 'contains' que verifique tal atributo?
Caso contrário terei que varrer a List categorias e para cada item varrer List experiencias comparando ids.
O metodo retainAll(), remove da lista todos os elementos que a lista passada como parametro não possui.... hummmm acho que nao fui muito claro, la vem um exemplo
publicclassCategoria{privateintid;privateStringdescricao;privateStringgrupo;// getters e setterspublicCategoria(inti){id=i;}publicbooleanequals(Objecto){if(!(oinstanceofCategoria))returnfalse;Categoriacategoria=(Categoria)o;return(categoria.getId()==this.getId());}}......// La no codigoListlista1=newArrayList();Listlista2=newArrayList();lista1.add(newCategoria(1));lista1.add(newCategoria(2));lista1.add(newCategoria(3));lista2.add(newCategoria(2));lista2.add(newCategoria(3));lista2.add(newCategoria(4));lista2.retainAll(lista1);// Pronto na lista2 ficaram apenas as categorias 2 e 3.....
Não sei se eh bem isso o q vc ker, mas talvez abra um pouco as ideias
flw
ps1...
nem compilei io codigo, portando deve haver bugs de digitação ou afins
asclows
pm:
Implemente o metodo equals da sua classe, ae vc podera utilizar os metodos da collection ou list, como indexOf
ou utilizar o Comparator/Comparable
Preciso comparar atributos de elementos Categoria das duas listas que não são objetos idênticos, ou seja, não são a mesma instância. Se eu implementar o método equals vou acabar fazendo os mesmos dois laços como mencionado anteriormente só que encapsulado, não seria?
indexOf retornaria o índice caso se tratasse de objetos com referências iguais (mesma instância), mas no caso o List<Categoria> categorias foi criado e populado por um categoriaDAO.getList() e outro List<Categorias> experiencias criado e populado por curriculo.read(id) o qual retorna uma instância da classe Curriculo do qual experiencias é um atributo.
asclows
Para tudo!!!
pm, deixa eu ver se assimilei. O método contains utiliza meu método equals para realizar a comparação?
Daí com a minha sobrecarga de equals consigo customizar o contains? É isso?
asclows
É ler javadoc às vezes faz bem né?
(o==null?e==null:o.equals(e))
Valeu pm!
R
rdgc
implemente o método equals na sua classe comparando o id, depois utilize o método contains(Object o) de sua coleção.