#

Gut das wir Verglichen haben

Wer kennt das nicht: man hat einen Comparator geschrieben, der den Schnittstellen folgt und brav -1, 0 und +1 entsprechend ob a<b , a=b oder a>b ist. Mit der Hilfe einer SortedSet, wie TreeSet oder Collections.sort kann dann alles sortiert werden. Doch siehe da: alles ist aufsteigend sortiert. Mit dem folgenden kleinen Adapter, der ebenfalls ein Comparator ist, läßt sich das Ergebnis auch absteigend sortieren, ohne den eigentlichen Comparator anzufassen.

import java.util.Comparator;
 
public class NegatingComparator implements Comparator {
private Comparator comparator;
 
public NegatingComparator(Comparator comparator){
this.comparator = comparator;
}
 
public int compare(Object o1, Object o2) {
return -1*comparator.compare(o1, o2);
}
 
}

Natürlich läßt sich auch ein konfigurierbarer Comparator erstellen, der die Sortierungsfolge als Parameter erhält:

import java.util.Comparator;
 
public class AscDescComparator implements Comparator {
  private Comparator comparator;
  public static final boolean ASCENDING = true;
  public static final boolean DESCENDING = false;
  private boolean isAscending = true;
 
  public AscDescComparator(Comparator comparator){
    this.comparator = comparator;
  }
 
  public AscDescComparator(Comparator comparator, boolean ascending){
    this.comparator = comparator;
    this.isAscending = ascending;
  }
 
  public int compare(Object o1, Object o2) {
    if (isAscending) return comparator.compare(o1, o2);
    return -1*comparator.compare(o1, o2);
  }
 
  public void setDirection(boolean ascending){
    isAscending = ascending;
  }
 
  public boolean getDirection(){
    return isAscending;
  }
}

Jedoch sollte man bedenken, dass das Ändern der Sortierreihenfolge durch ein get-/set-Methodenpaar innerhalb eines SortedSet für Unkonsistenz sorgt. Hier müssen alle Objekte entfernt und erneut hinzugefügt werden.

Tags:,

One Response to “Gut das wir Verglichen haben” »»

  1. Comment by Secco | 11:33 16.06.06|X

    Tatsächlich gibt es in der JDK auch einen entsprechenden Comparator:

    Comparator comparator = Collections.reverseOrder();

Leave a Reply »»

Note: All comments are manually approved to avoid spam. So if your comment doesn't appear immediately, that's ok. Have patience, it can take some days until I have the time to approve my comments.