20061121

Comparator zum Vergleich von Maps

import java.util.Comparator;
import java.util.List;
import java.util.Map;


public class MapComparator<M extends Map<E,F>,E,F extends Comparable<F>> implements Comparator<M>
{
 List<SortKey<E>> keys;
 int keyCount;
 int factor;
 
 public MapComparator(List<SortKey<E>> keys)
 {
  this(keys,false);
 }
 public MapComparator(List<SortKey<E>> keys, boolean reverse)
 {
  factor = reverse?-1:1;
  this.keys = keys;
  keyCount = keys.size(); //zugriff beschleunigen
 }

 public int compare(M map1, M map2) {
  if (keys.size()>0)
   return compareByKey(map1,map2,0);
  return 0;
 }
 
 private int compareByKey(M map1, M map2, int key)
 {
  if (key<keyCount)
  {
   SortKey skey = keys.get(key); 
   int factor = skey.isReverse()?-1:1;
   F val1 = map1.get(skey.getKey());
   F val2 = map2.get(skey.getKey());
   if (val1!=null&&val2!=null)
   {
    int ret = val1.compareTo(val2)*factor;
    return ret==0?compareByKey(map1,map2,key+1):ret;
   }
  }
  return 0;
 }
}

Keine Kommentare: