[quote=jeroqueiroz]Caros,
Estou com uma query onde traz os registros corretamente, porém preciso verificar agora se estes registros trazidos pela query satisfaz uma condição.
Pensei em ter uma função que passo o resultado desta query como parametro e retorne uma lista com os registros que satisfazem esta condição.
Alguma dica de função que recebe uma lista e retorna uma lista ou alguma outra dica de como fazer isso?
qualquer ajuda e valida…
[/quote]
Supondo que a condição não pode ser testada via SQL de forma a filtrar os objetos no banco, a forma padrão de fazer isto é usar um filtro assim
interface Filter<T>{
boolean accept(T obj);
}
//em outra classe
public static <T> void filter(Collection<T> dados,Filter<T> filter, Collection<T> resultado){
for (T obj : dados){
if(filter.accept(obj)){
resultado.add(obj);
}
}
}
Quem passa no filtro é quem fizer o método accept retornar true. Quem passar é adicionado ao resultado.
Este modelo permite que vc use qualquer tipo de coleção, não apenas list.
Se vc quer apenas remover quem não passar o filtro e souber que a coleção é editável, vc pode fazer assim (que é mais rápido)
public static <T> void filter(Collection<T> dados,Filter<T> filtro{
for (Iterator<T> it = dados.iterator();it.hasNext();){
T obj = it.next();
if(!filter.accept(obj)){ // atenção ao not
it.remove();
}
}
}
Por exemplo, obter apenas nomes começados por A
List<String> lista = Arrays.asList("Ana", "Amanda","Beatriz","Carla");
List<String> resultado = new ArrayList<String>();
Filter<String> filter = new Filter(){ // inner class
public boolean accept(String s){
return s.startWith("A");
}
}
CollectionUtils.filter(lista, filter, resultado);