Java Comparator

DOMANDA:

Cos'è e come funziona il Comparator in Java?


RISPOSTA:

Il Comparator è un'interfaccia Java (java.util.Comparator) che permette di confrontare due oggetti non misurabili in modo naturale. 
Bisogna precisare che Comparator è capace di confrontare due oggetti differenti mentre Comparable confronta l'istanza stessa con un altro oggetto.

Facciamo un esempio creando un comparatore di voti scolastici.

Creiamo inizialmente una Enum che rappresenta tutti i voti possibili:

package comparator;

public enum VotiScuola {
   INSUFFICIENTE (4),
   MEDIOCRE(5),
   SUFFICIENTE (6),
   BUONO (7),
   OTTIMO (8),
   ECCELLENTE (9);

   private final int votoNum;

   private VotiScuola(int votoNum){
      this.votoNum = votoNum;
   }

   public int getVoto() {
      return votoNum;
   }
}


Creiamo un Comparator che confronta i differenti voti:

package comparator;

public class VotiScuolaComparator implements java.util.Comparator<VotiScuola>{

   @Override
   public int compare(VotiScuola v1, VotiScuola v2) {
      return v1.getVoto()-v2.getVoto();
   }
}


Infine testiamo il nostro Comparator:

package comparator;

public class TestComparator {
   public static void main(String[] args) {

      VotiScuola voto = VotiScuola.SUFFICIENTE; // input hardcoded
      VotiScuolaComparator c = new VotiScuolaComparator();

      if(c.compare(voto, VotiScuola.SUFFICIENTE) < 0)
         System.out.println("Non hai preso la sufficienza");
      else
      if(c.compare(voto, VotiScuola.SUFFICIENTE) == 0)
         System.out.println("Sei sufficiente");
      else
         System.out.println("Hai preso più della sufficienza");

      System.out.println(c.compare(voto, VotiScuola.INSUFFICIENTE));
      System.out.println(c.compare(voto, VotiScuola.SUFFICIENTE));
      System.out.println(c.compare(voto, VotiScuola.OTTIMO));
   }
}


L'output sarà:

Sei sufficiente
2
0
-2


Spieghiamo brevemente come ragiona il Comparator: il primo parametro di c.compare() è minore del secondo se il risultato è negativo (terzo output), è uguale se restituisce 0 (secondo output), è superiore se è positivo (primo output).

Un oggetto Comparable ragiona secondo la stessa logica.


Commenti

Post popolari in questo blog

Arrotondamento e troncamento in Java

Eclipse: Shortcuts (scorciatoie) da tastiera

Strutture dati: List, Set, Map

Creare un eseguibile Java