Pessoal,
Tenho uma interface gráfica onde o usuário cadastra alguns nomes. Se o usuário entrar com: ano 1, ano 2, ano 3, ano 4, ano 5, ano 6, ano 7, ano 8, ano 9, ano 10.
Os valores são listados na interface da seguinte forma:
ano 1
ano 10
ano 2
ano 3
ano 4
ano 5
ano 6
ano 7
ano 8
ano 9
Aguem sabe o que posso fazer para colocar o ano 10 após ano 9. Lembrando que o usuário pode entra os nomes em qualquer ordem mas o sistema tem que ordenar. Ainda vale ressaltar que são campos textos.
louds
Maio 10, 2006, 10:27am
#2
compare primeiro pelo tamanho e depois pelo conteúdo
É um Collection. O seguinet caso acontece também:
ano 1
ano 10
ano 11
ano 2
Comparar pelo conteudo e pelo tamanho. vou testar mas vários nomes podem ser do mesmo tamanho.
É um Collection. O seguinte caso acontece também:
ano 1
ano 10
ano 11
ano 2
Comparar pelo conteudo e pelo tamanho. vou testar mas vários nomes podem ser do mesmo tamanho.
pq vc nao cria seu compareTo e usa Collections.sort(colecao);
Seu comparteTo pegaria a segunda parte (numeros) e compararia como numeros mesmo, usando parseInt.
Pelo menos é a unica solucao que vejo no momento.
Já estou implementando um comparator, mas acho que o Collection. sort() só aceita um List como parâmetro.
tu pode usar algo assim?
Collection c = new ArrayList();
Collections.sort((ArrayList) c);
Na verdade o processo de ordenação não é tão trivial assim:
Por exemplo posso ter A002B ou A130B e por ai vai.
Vou pesquisar melhor.
_fs
Maio 10, 2006, 12:00pm
#9
Você pode implementar o comparator que quiser:
Collections.sort( list, new Comparator() {
public int compare( Object o1, Object o2 ) {
return 0;
}
} );
d2g
Maio 10, 2006, 2:20pm
#10
Provavelmente um o comparator de strings resolve seu problema em 90% dos casos, e vc ainda pode tratar casos especiais, vide abaixo:
Collections.sort( list, new Comparator() {
public int compare( Object o1, Object o2 ) {
/// if(condicao de caso especial){
// ...
// return
// }
return o1.toString().copareTo(o2.toString);
}
} );