4
respostas

Ordenar a exibicao

Olá! Sei que deveria ser um problema de logica basico, mas nessa listagem do banco de dados pra activity e colunas ... acabei me perdendo..

no metodo: public List buscaAlunos() { String sql = "SELECT * FROM Alunos;"; SQLiteDataBase db = getReadableDatabase(); Cursor c = db.rawQuery(sql, null);

List alunos = new ArrayList(); while (c.moveToNext()) { Aluno aluno = new Aluno(); aluno.setId(c.getLong(c.getColumnIndex("id"))); aluno.setNome(c.getString(c.getColumnIndex("nome"))); aluno.setEndereco(c.getString(c.getColumnIndex("endereco"))); aluno.setTelefone(c.getString(c.getColumnIndex("telefone"))); aluno.setSite(c.getString(c.getColumnIndex("site"))); aluno.setNota(c.getDouble(c.getColumnIndex("nota")));

alunos.add(aluno);

} c.close();

return alunos;

}

Se eu quisesse ordenar a listagem de alunos pela nota mais alta, por exemplo... como poderia fazer isso? de uma maneira simples e eficiente..

4 respostas

Uma forma fácil seria ordenar pelo SELECT, utilizando ORDER BY Nota DESC.

Outra forma é sobrescrevendo o método de Collections.sort() :

Collections.sort(alunos, new Comparator<Aluno>() {
    @Override
    public int compare(Aluno a1, Aluno a2) {
        return Double.compare(a1.getNota(), a2.getNota());
    }
});

Claro, coloque esse código depois de popular a lista e antes de dar o return do método. Veja se funciona.

hmm como seria essa forma pelo SELECT, ORDER BY?? n sei nada de banco de dados ainda

no caso do collections sort eu tenho q fazer uma condicao ne? pra tratar caso o numero de alunos for < 2

Sobre o .sort(), acredito que ele já verifique isso. Não tenho certeza, mas você pode testar com um só, ver o que acontece e nos avisar aqui :)

O SELECT ficaria assim: "SELECT * FROM Alunos ORDER BY Nota DESC;". Depois do ORDER BY você coluna o nome da coluna (ou número representando a posição) e o DESC significa que vai ordenar de forma decrescente, se baseando na coluna passada para o ORDER BY, no caso a coluna Nota.