@SuppressWarnings("unchecked") private static <K, V> TreeMap<K, V> createFromTuple(EntryComparator<K, V> entryComparator, Tuple2<? extends K, ? extends V> entry) { Objects.requireNonNull(entry, "entry is null"); return new TreeMap<>(RedBlackTree.of(entryComparator, (Tuple2<K, V>) entry)); }
@SuppressWarnings("unchecked") private static <K, V> TreeMap<K, V> createTreeMap(EntryComparator<K, V> entryComparator, Iterable<? extends Tuple2<? extends K, ? extends V>> entries) { Objects.requireNonNull(entries, "entries is null"); RedBlackTree<Tuple2<K, V>> tree = RedBlackTree.empty(entryComparator); for (Tuple2<K, V> entry : (Iterable<Tuple2<K, V>>) entries) { tree = tree.insert(entry); } return new TreeMap<>(tree); }
@SuppressWarnings("unchecked") private static <K, V> TreeMap<K, V> createFromMap(EntryComparator<K, V> entryComparator, java.util.Map<? extends K, ? extends V> map) { Objects.requireNonNull(map, "map is null"); RedBlackTree<Tuple2<K, V>> tree = RedBlackTree.empty(entryComparator); for (java.util.Map.Entry<K, V> entry : ((java.util.Map<K, V>) map).entrySet()) { tree = tree.insert(Tuple.of(entry.getKey(), entry.getValue())); } return new TreeMap<>(tree); }
@SafeVarargs private static <K, V> TreeMap<K, V> createFromMapEntries(EntryComparator<K, V> entryComparator, java.util.Map.Entry<? extends K, ? extends V>... entries) { Objects.requireNonNull(entries, "entries is null"); RedBlackTree<Tuple2<K, V>> tree = RedBlackTree.empty(entryComparator); for (java.util.Map.Entry<? extends K, ? extends V> entry : entries) { final K key = entry.getKey(); final V value = entry.getValue(); tree = tree.insert(Tuple.of(key, value)); } return new TreeMap<>(tree); }
private static <K, K2, V, V2> TreeMap<K2, V2> createTreeMap(EntryComparator<K2, V2> entryComparator, Iterable<Tuple2<K, V>> entries, Function<Tuple2<K, V>, Tuple2<K2, V2>> entryMapper) { RedBlackTree<Tuple2<K2, V2>> tree = RedBlackTree.empty(entryComparator); for (Tuple2<K, V> entry : entries) { tree = tree.insert(entryMapper.apply(entry)); } return new TreeMap<>(tree); }
@SuppressWarnings("unchecked") private static <K, V> TreeMap<K, V> createFromTuples(EntryComparator<K, V> entryComparator, Tuple2<? extends K, ? extends V>... entries) { Objects.requireNonNull(entries, "entries is null"); RedBlackTree<Tuple2<K, V>> tree = RedBlackTree.empty(entryComparator); for (Tuple2<? extends K, ? extends V> entry : entries) { tree = tree.insert((Tuple2<K, V>) entry); } return new TreeMap<>(tree); }
/** * Returns the empty TreeMap using the given key comparator. * * @param <K> The key type * @param <V> The value type * @param keyComparator The comparator used to sort the entries by their key. * @return A new empty TreeMap. */ public static <K, V> TreeMap<K, V> empty(Comparator<? super K> keyComparator) { return new TreeMap<>(RedBlackTree.empty(EntryComparator.of(keyComparator))); }
/** * Returns the empty TreeMap. The underlying key comparator is the natural comparator of K. * * @param <K> The key type * @param <V> The value type * @return A new empty TreeMap. */ public static <K extends Comparable<? super K>, V> TreeMap<K, V> empty() { return new TreeMap<>(RedBlackTree.empty(EntryComparator.natural())); }
private TreeMap<K, V> emptyInstance() { return isEmpty() ? this : new TreeMap<>(entries.emptyInstance()); }
@Override public TreeMap<K, V> remove(K key) { final V ignored = null; final Tuple2<K, V> entry = new Tuple2<>(key, ignored); if (entries.contains(entry)) { return new TreeMap<>(entries.delete(entry)); } else { return this; } }
@Override public TreeMap<K, V> tail() { if (isEmpty()) { throw new UnsupportedOperationException("tail of empty TreeMap"); } else { final Tuple2<K, V> min = entries.min().get(); return new TreeMap<>(entries.delete(min)); } }
@Override public TreeMap<K, V> init() { if (isEmpty()) { throw new UnsupportedOperationException("init of empty TreeMap"); } else { final Tuple2<K, V> max = entries.max().get(); return new TreeMap<>(entries.delete(max)); } }
@Override public TreeMap<K, V> retainAll(Iterable<? extends Tuple2<K, V>> elements) { Objects.requireNonNull(elements, "elements is null"); RedBlackTree<Tuple2<K, V>> tree = RedBlackTree.empty(entries.comparator()); for (Tuple2<K, V> entry : elements) { if (contains(entry)) { tree = tree.insert(entry); } } return new TreeMap<>(tree); }
@SuppressWarnings("unchecked") private static <K, V> TreeMap<K, V> createFromPairs(EntryComparator<K, V> entryComparator, Object... pairs) { RedBlackTree<Tuple2<K, V>> tree = RedBlackTree.empty(entryComparator); for (int i = 0; i < pairs.length; i += 2) { final K key = (K) pairs[i]; final V value = (V) pairs[i + 1]; tree = tree.insert(Tuple.of(key, value)); } return new TreeMap<>(tree); }
@Override public TreeMap<K, V> put(K key, V value) { return new TreeMap<>(entries.insert(new Tuple2<>(key, value))); }
@Override public TreeMap<K, V> removeAll(Iterable<? extends K> keys) { final V ignored = null; RedBlackTree<Tuple2<K, V>> removed = entries; for (K key : keys) { final Tuple2<K, V> entry = new Tuple2<>(key, ignored); if (removed.contains(entry)) { removed = removed.delete(entry); } } if (removed.size() == entries.size()) { return this; } else { return new TreeMap<>(removed); } }
@SuppressWarnings("unchecked") private static <K, V> TreeMap<K, V> createFromTuples(EntryComparator<K, V> entryComparator, Tuple2<? extends K, ? extends V>... entries) { Objects.requireNonNull(entries, "entries is null"); RedBlackTree<Tuple2<K, V>> tree = RedBlackTree.empty(entryComparator); for (Tuple2<? extends K, ? extends V> entry : entries) { tree = tree.insert((Tuple2<K, V>) entry); } return new TreeMap<>(tree); }
@SafeVarargs private static <K, V> TreeMap<K, V> createFromMapEntries(EntryComparator<K, V> entryComparator, java.util.Map.Entry<? extends K, ? extends V>... entries) { Objects.requireNonNull(entries, "entries is null"); RedBlackTree<Tuple2<K, V>> tree = RedBlackTree.empty(entryComparator); for (java.util.Map.Entry<? extends K, ? extends V> entry : entries) { final K key = entry.getKey(); final V value = entry.getValue(); tree = tree.insert(Tuple.of(key, value)); } return new TreeMap<>(tree); }
/** * Returns the empty TreeMap using the given key comparator. * * @param <K> The key type * @param <V> The value type * @param keyComparator The comparator used to sort the entries by their key. * @return A new empty TreeMap. */ public static <K, V> TreeMap<K, V> empty(Comparator<? super K> keyComparator) { return new TreeMap<>(RedBlackTree.empty(EntryComparator.of(keyComparator))); }
@SuppressWarnings("unchecked") private static <K, V> TreeMap<K, V> createFromPairs(EntryComparator<K, V> entryComparator, Object... pairs) { RedBlackTree<Tuple2<K, V>> tree = RedBlackTree.empty(entryComparator); for (int i = 0; i < pairs.length; i += 2) { final K key = (K) pairs[i]; final V value = (V) pairs[i + 1]; tree = tree.insert(Tuple.of(key, value)); } return new TreeMap<>(tree); }