Bom dia pessoal
Eu estou com uma duvida quanto a ordenação. Eu faço uma pesquisa no banco e retorno uma List<T> onde T é um objeto que representa alguma tabela, por exemplo Cliente, Fornecedor etc. Então, após receber essa consulta do meu businessDelegate, queria que o usuário pudesse ordenar da maneira como quizesse, por exemplo, Cliente tem nome, ele clica na coluna nome e a lista é ordenada dessa forma, isso para todas as colunas que aparecem na listagem. Eu acho que terei de usar reclect, para poder ler os campos do objeto que faz parte da lista, a principio pensei em um método que recebe uma lista, junto com o campo que quer ordenar e usando a classe Arrays, eu faço a ordenação, e depois crio novamente a lista com o array ordenado. Só que eu parei por ai, porque surigiu as duvidas… isso deve ser extremamente lento certo? parece muito “xunxado”, então, qual é a forma que geralmente se faz para esse tipo de coisa? sem precisar consultar um banco para montar outra lista ordenada.
Segue o meu “prototipo”, não cheguei nem a testar, porque ja imagino que seja lerto… e que tenha outra forma melhor de fazer…
public static void sortList(List<BaseDTO> list, final String DTOField) {
Object[] array = list.toArray();
Arrays.sort(array, new Comparator() {
public int compare(Object o1, Object o2)
{
if ((o1 instanceof BaseDTO) && (o2 instanceof BaseDTO) && (o1.getClass().equals(o2.getClass())))
{
BaseDTO dto1 = (BaseDTO) o1;
BaseDTO dto2 = (BaseDTO) o2;
String field = DTOField.substring(0, 1).toUpperCase() + DTOField.substring(1);
try
{
return (dto1.getClass().getMethod("get" + field, null).invoke(dto1, null).toString()).compareTo(dto2.getClass().getMethod("get" + field, null).invoke(dto1, null).toString());
}
catch (IllegalArgumentException e)
{
}
catch (SecurityException e)
{
}
catch (IllegalAccessException e)
{
}
catch (InvocationTargetException e)
{
}
catch (NoSuchMethodException e)
{
}
}
return 0;
}
});
//cria a lista com o array ordenado e retorna, seila...
}
