package com.googlecode.totallylazy.collections;
import com.googlecode.totallylazy.functions.Callables;
import com.googlecode.totallylazy.Pair;
import com.googlecode.totallylazy.comparators.Comparators;
import java.util.Comparator;
import static com.googlecode.totallylazy.Sequences.sequence;
import static com.googlecode.totallylazy.Unchecked.cast;
public class TreeMapFactory<K, V, T extends TreeMap<K, V>> extends AbstractMapFactory<K, V, T> {
private final TreeFactory factory;
private final Comparator<K> comparator;
protected TreeMapFactory(TreeFactory factory, Comparator<K> comparator) {
this.factory = factory;
this.comparator = comparator;
}
public static <K, V, T extends TreeMap<K, V>> TreeMapFactory<K, V, T> treeMapFactory(TreeFactory factory, Comparator<K> comparator) {
return new TreeMapFactory<K, V, T>(factory, comparator);
}
public static <K extends Comparable<? super K>, V, T extends TreeMap<K, V>> TreeMapFactory<K, V, T> treeMapFactory(TreeFactory factory) {
return new TreeMapFactory<K, V, T>(factory, Comparators.<K>ascending());
}
@Override
public T empty() {
return cast(factory.create(comparator));
}
@Override
public T map(Iterable<? extends Pair<K, V>> values) {
return cast(TreeMap.methods.treeMap(factory, comparator, sequence(values).toSortedList(Comparators.<Pair<K, V>, K>by(Callables.<K>first(), comparator))));
}
}