Olá pessoal,
Estou com problemas para ordenar objetos em uma List, por dois atributos do tipo enum ao mesmo tempo.
Tenho com uma classe Carta, que tem duas Enums, TipoNipe e TipoValor, preciso ordenar a mão do jogador, colocando todas as cartas com o mesmo nipe juntas e da menor para a maior valor.
Estou há uns 3 dias tentando fazer isso, tentei implementar de diversas formas, que eu entendia e que pesquisava, mas não obtive sucesso.
Eu tenho uma Classe ConjuntoCartas, Mao extends ConjuntoCartas, MaoJogoEspecifico extends Mao, que tem o método organizar()
O método compareTo em Carta, ficou assim:
Versão 1
@Override
public int compareTo(Carta carta) {
if (this.getNipe().ordinal() < carta.getNipe().ordinal()) {
return -1;
} else if (this.getNipe().ordinal() > carta.getNipe().ordinal()) {
return 1;
} else if (this.getNipe().ordinal() == carta.getNipe().ordinal()) {
return this.getValor().compareTo(carta.getValor());
} else {
return 0;
}
Versão 2
@Override
public int compareTo(Carta carta) {
if (this.getNipe().ordinal() > carta.getNipe().ordinal()) {
return 2;
} if (this.getNipe().ordinal() < carta.getValor().ordinal()) {
return -2;
} if (this.getNipe().ordinal() == carta.getNipe().ordinal()) {
return 0;
}
if (this.getValor().ordinal() > carta.getValor().ordinal()) {
return 1;
} if (this.getValor().ordinal() < carta.getValor().ordinal()) {
return -1;
} if (this.getValor().ordinal() == carta.getValor().ordinal()) {
return 0;
} else return 0;
}
Versão 3
[code] @Override
public int compareTo(Carta carta) {
if (this.getNipe().ordinal() != 0) {
return this.getNipe().compareTo(carta.getNipe());
}
else if (this.getNipe().ordinal() == carta.getNipe().ordinal()) {
return this.getValor().compareTo(carta.getValor());
} else {
return 0;
}}[/code]
O método organizar em MaoJogoEspecifico ficou assim
@Override
public void organizar() {
Collections.sort(cartas);
}
Pessoal, peço a ajuda para entender melhor como utilizar essa técnica de ordenação ou uma melhor.
Desculpem pelo excesso ou omissão de dados, sou novato também em fóruns…