Jump to content

CompateTo()


Guest skinie18

Recommended Posts

Posted

Boas, eu tenho um objecto que implementa a interface Comparable, ou seja tem um compareTo. Mais tarde no programa uso para poder fazer o Collections.sort de um ArrayList desse objecto.

Ate aqui tudo bem, só que eu agora quero ordenar de maneira diferente, em vez de ordenar por pontos(Por exemplo) quero ordenar por coordenadas(exemplo)... Não posso fazer 2 compareTo o mesmo que o faça o Collections.sort não vai usar o segundo.

Ouvi falar da interface Comparator mas não percebi como usa-la ou se ela resolve o meu problema. Alguém me pode ajudar?

class Pontos implements Comparable<Pontos>

public int compareTo(Pontos pt){  
if(this.pt > pt.getPt)
   return 1;
else if(this.pt < pt.getPt)
   return -1
return 0;
}  

ArrayList<Pontos> pt = new ArrayList<Pontos>();  
        pt.add(new Pontos(140,130));  
        pt.add(new Pontos(145,135));  
        pt.add(new Pontos(143,133));  
    Collections.sort(pt);  
Posted

A interface Comparator resolve-te esse problema. Terás de criar uma classe para cada forma de ordenação que queres usar, e cada uma dessas classes deve implementar a interface Comparator. O funcionamento é similar à interface Comparable, terás de implementar o método compare() que recebe os dois objectos a comparar.

Quando quiseres usar um método de ordenação, além da estrutura a ordenar passas também uma instância do comparador que queres usar na ordenação.

Resumindo, e pegando no exemplo de ordenar por pontos ou coordenadas, crias uma classe PontosComparator, e uma CoordenadasComparator, onde ambas implementem a interface Comparator e depois implementas o método compare() em cada uma das classes da maneira que pretendes. Depois ao ordenar passas a instância do comparador que pretendes.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.