Como verificar se um dado 'id' está contido em uma coleção

7 respostas
asclows

Tenho uma Classe:

public class Categoria {
    private Long id;
    private String descricao;
    private String grupo;

    // 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.

7 Respostas

P

Implemente o metodo equals da sua classe, ae vc podera utilizar os metodos da collection ou list, como indexOf

ou utilizar o Comparator/Comparable

Link_pg

Olá!

Não conheço nenhum método que faça esse tipo de coisa… eu faria exatamente o que você sugeriu:

for(Categoria cat : categorias){
    for(Categoria exp : experiencias){
        if(cat.equals(exp)){
            //algo assim
        }
    }
}

Abraços

P

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

public class Categoria {
     private int id;
     private String descricao;
     private String grupo;
 
     // getters e setters

    public Categoria(int i)
    { 
       id = i;
    }

    public boolean equals(Object o)
    {
        if (!(o instanceof Categoria)) return false;
        Categoria categoria = (Categoria)o;
        return (categoria.getId() == this.getId());
     }
 }

......
// La no codigo
List lista1 = new ArrayList();
List lista2 = new ArrayList();

lista1.add(new Categoria(1));
lista1.add(new Categoria(2));
lista1.add(new Categoria(3));

lista2.add(new Categoria(2));
lista2.add(new Categoria(3));
lista2.add(new Categoria(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

implemente o método equals na sua classe comparando o id, depois utilize o método contains(Object o) de sua coleção.

flw!

Criado 5 de julho de 2007
Ultima resposta 5 de jul. de 2007
Respostas 7
Participantes 4