
package de.ivu.elect.sitzberechnung.math;

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

/**
 * Sortiert die Objekte der KEYs in der durch die VALUEs vorgegebene Reihenfolge.
 *
 * @param <KEY>
 *          Typ der Objekte, die sortiert werden sollen
 * @param <VALUE>
 *          Typ der Objekte, die Sortierreihenfolge definieren
 */
public class ComparatorByValue<KEY, VALUE extends Comparable< ? super VALUE>> implements Comparator<KEY> {

  private final Map<KEY, VALUE> map;

  private final VALUE defaultValue;

  public ComparatorByValue(Map<KEY, VALUE> map, VALUE defaultValue) {
    super();

    this.map = map;

    this.defaultValue = defaultValue;
  }

  @Override
  public int compare(KEY x, KEY y) {
    return notNull(map.get(x)).compareTo(map.get(y));
  }

  private VALUE notNull(VALUE value) {
    return value == null ? defaultValue : value;
  }
}
