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;
}
}
20061121
Comparator zum Vergleich von Maps
Abonnieren
Kommentare zum Post (Atom)

Keine Kommentare:
Kommentar veröffentlichen