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).
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);
}
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
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…