Comparar e ordenar atributos

0 respostas
Onimatsu

Boa noite colegas.
Estou tentando ordenar alunos por curso e nota recebendo um valor aleatório que está em uma lista, tenho que fazer isso por bubleSort e o método compare de Comparator sobrescrito.
Exemplo:
lista desordenada - curso = B, nota = 8; curso = B, nota = 7; curso = A, nota = 10;
resultado esperado - curso = A, nota = 10;curso = B, nota = 7; curso = B, nota = 8;

Primeiro tive que adaptar o bubleSort para utilizar Array:
private static <T> ArrayList<T> bubleSort(ArrayList<T> list, Comparator<T> comp) {
        for (int i = 0; i < list.size(); i++) {
            for (int j = 0; j < list.size() - 1 - i; j++) {
                if (comp.compare(list.get(j), list.get(j + 1)) > 0) {
                    T aux = list.get(j);
                    list.set(j, list.get(j + 1));
                    list.set(j + 1, aux);
                }
            }
        }
        return list;
    }
Depois fiz duas tentativas de compare:
import java.util.Comparator;

public class CursoNotaComparetor implements Comparator<Aluno> {

    @Override
    public int compare(Aluno a1, Aluno a2) {
        if (a1.getCurso().equalsIgnoreCase(a2.getCurso())) {
            return (int) (a1.getNota() - a2.getNota());
        }
        return 0;
    }
}
import java.util.Comparator;

public class CursoNotaComparetor implements Comparator<Aluno> {

    @Override
    public int compare(Aluno a1, Aluno a2) {
        if (a1.getCurso().compareToIgnoreCase(a2.getCurso()) > 0) {
            return (int) (a1.getNota() - a2.getNota());
        }
        return 0;
    }
}
No compare quando eu testei com um atributo de cada vez funcionou, mas quando eu coloco para comparar os dois atributos fica desordenado do mesmo jeito. Por favor me ajudem a identificar onde está o erro? Agradeço quem puder me ajudar.
Criado 2 de junho de 2013
Respostas 0
Participantes 1