Duvida Cruel - OO

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

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

[code]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;
}	

}
[/code]

[code]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);
	
}

}[/code]

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

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

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

[quote=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).
[/quote]

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…