package eksempelklasser;
@FunctionalInterface
public interface Komparator<T>
{
int compare(T o1, T o2);
public static <T extends Comparable<? super T>> Komparator<T> naturligOrden()
{
return (x, y) -> x.compareTo(y);
}
public static <T extends Comparable<? super T>> Komparator<T> omvendtOrden()
{
return (x, y) -> y.compareTo(x);
}
public static <T, R extends Comparable<? super R>>
Komparator<T> orden(Funksjon<? super T, ? extends R> velger)
{
return (x, y) -> velger.anvend(x).compareTo(velger.anvend(y));
}
public static <T, R> Komparator<T> orden
(Funksjon<? super T, ? extends R> velger, Komparator<? super R> c)
{
return (x, y) -> c.compare(velger.anvend(x), velger.anvend(y));
}
}