Duvida Cruel - OO

6 respostas
world_fernando

Opa ,

Seguinte pessoal estou com uma dúvida bem básica, Ex:
Techo uma Classe

class Teste {

int id;

string nome;

}

agora imagine varios abjetos desta classe em um ArrayList certo.

tem como eu perquisar no arraylist algo assim : meuteste.id = 50  e ele localizar um ou varios objetos dentro do arraylist (pois quero evitar ficar toda hora consultadno na base).

grato

Fernando

6 Respostas

peczenyj

Vc pode fazer um foreach em cada elemento procurando por um objeto com essas caracteristicas.

Andre_Fonseca
package teste;

public class Objeto {

	private int id;
	private String nome;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		final Objeto other = (Objeto) obj;
		if (id != other.id)
			return false;
		
		return true;
	}	
}
package teste;

import java.util.ArrayList;
import java.util.List;

public class Main {

	public static void main(String[] args) {
		List<Objeto> lista = new ArrayList<Objeto>();
		Objeto obj1 = new Objeto();
		obj1.setId(10);
		obj1.setNome("Jose");
		
		lista.add(obj1);
		
		Objeto obj2 = new Objeto();
		obj2.setId(10);
		obj2.setNome("Carlos");
		
		if (obj1.equals(obj2)) 
			System.out.println("Não insere na lista!!!");
                else
                  lista.add(obj2);
		
	}
}
Andre_Fonseca

Ops, se vc quiser procurar na lista pode fazer isso:

int id; int id_busca=10; boolean insere=true; for (Objeto objeto : lista) { id = objeto.getId(); if (id_busca == id) insere = false; }

[]´s

world_fernando

Blz André quase lá mas não tenho como filtrar né sem fazer o for ou while com a condição, tipo eu conseguiria fazer sem problemas usando como vc mostrou e add em outro arraylist, é que pensei que poderia somente filtrar sabe e depois ir adicionar mais filtros fazendo pesquisas mais complexas, assim fazendo em um unico array nao consumiria tanta memoria da maquina

Andre_Fonseca

Coloca um exemplo ai de como você gostaria de fazer, acho que o jeito mais fácil é interagir na lista mesmo…

sergiotaborda

world_fernando:
Opa ,

Seguinte pessoal estou com uma dúvida bem básica, Ex:
Techo uma Classe

class Teste {

int id;

string nome;

}

agora imagine varios abjetos desta classe em um ArrayList certo.

tem como eu perquisar no arraylist algo assim : meuteste.id = 50  e ele localizar um ou varios objetos dentro do arraylist (pois quero evitar ficar toda hora consultadno na base).

</blockquote>

Num list vc tem que usar um filtro. Mas pode usar um Map para o caso do ID.
O idieal é que vc construa um objeto que é iterável e filtrável e se comporta como um Map para o caso de um campo em particular

interface Filter {

     public boolean accept(Object obj);
}


interface Mapped {

     public Object getKey (Object obj);
}

class Cache implements Iteratable{

    Map map = new HashMap();
    Mapper mapper;

    public Cache (Mapper mapper ){
        this.mapper = mapper;
    }


 public void add (Object obj){
    map.put(mapper.getKey(obj) ,  obj);
}

  public Iterator iterate (){
     return map.values.iterator()
  }
  

 public List filter ( Filter filter  ){
     List res = new LinkedList();
     for (Object o: this){
            if (filter.accept(o)){
              res.add(o);
           }
     }
     return res;
 }
}


// uso 

Mapper m = new Mapper(){

public Object getKey (Object obj){
     return new Integer(((Test)obj).id);
}

}
Cache cache = new Cache(m);

cache.add(new Test());

cache.filter(new Filter (){
       
        public boolean accept(Object obj){
                return ((Test)obj).id == 5;
        }

});

Vc pode usar o padrão composite para criar filtros mais complexos.
Pode usar Generics para deixar o codigo mais limpo.
Pode criar Mappers que procuram por campos com annotação especifica (@Key, por exemplo)
etc…

Criado 27 de fevereiro de 2008
Ultima resposta 28 de fev. de 2008
Respostas 6
Participantes 4