Gostaria de saber como faço pra ordenar uma lista baseado em mais de um atributo.
Por exemplo:
Tem uma lista de provas com diversas disciplinas cada, e eu quero ordenar em ordem decrescente pelo número total de questões acertadas, no caso de empate ordenar somente os empatados pelo maior número de acertos na disciplina Português, em caso de novo empate, ordenar os empatados pela maior idade, e assim sucessivamente.
Gostaria de saber como faço pra ordenar uma lista baseado em mais de um atributo.
Por exemplo:
Tem uma lista de provas com diversas disciplinas cada, e eu quero ordenar em ordem decrescente pelo número total de questões acertadas, no caso de empate ordenar somente os empatados pelo maior número de acertos na disciplina Português, em caso de novo empate, ordenar os empatados pela maior idade, e assim sucessivamente.
[/quote]
Primeira coisa : não use nenhum tipo de concatenação.
Em java vc implementa um comparator assim
public class ResultadoProvaComparator<ResultadoProva>{
public int compare(ResultadoProva a , ResultadoProvab){
int comp = a.getTotalQuestoesAcertadas().compareTo(b.getTotalQuestoesAcertadas());
if ( comp == 0 ){
// empate no primeiro criterio, usando o segundo
comp = a.getMaiorNumeroDeAcertos().compareTo(b.getMaiorNumeroDeAcertos());
if ( comp == 0 ){
// empate no segundo criterio, usando o terceiro e ultimo
return a.getIdade().compareTo(b.getIdade());
}
}
return comp;
}
}
Basicamente vc cria um if para cada criterio quando ele dá zero. O ultimo critério retorna diretamente.
Quando o resultado não for zero, o return final fora dos ifs será usado.
Esta mecanica ordena na ordem crescente e vc usa assim :
Collections.sort(lista, new ResultadoProvaComparator());
E na ordem Alfabética?
Já tenho uma lista (ArrayList). Ao exibir no RichComboBox ela aparece desornedada. A primeira combo tá ordenada, mas a segunda q é gerada a partir da segunda, não.