src/share/classes/java/util/Map.java

Print this page
rev 7302 : 8009736: Comparator API cleanup
Reviewed-by:
Contributed-by: henry.jen@oracle.com

*** 26,35 **** --- 26,36 ---- package java.util; import java.util.function.BiConsumer; import java.util.function.BiFunction; import java.util.function.Function; + import java.io.Serializable; /** * An object that maps keys to values. A map cannot contain duplicate keys; * each key can map to at most one value. *
*** 444,453 **** --- 445,524 ---- * @see Object#hashCode() * @see Object#equals(Object) * @see #equals(Object) */ int hashCode(); + + /** + * Returns a comparator that compares {@link Map.Entry} in natural order on key. + * + * <p>The returned comparator is serializable. Note that a null key in the + * map will cause the returned comparator to throw {@link + * NullPointerException}. + * + * @param <K> {@link Comparable} key type + * @param <V> value type + * @return A comparator that compares {@link Map.Entry} in natural order on key. + * @see Comparable + */ + public static <K extends Comparable<? super K>, V> Comparator<Map.Entry<K,V>> comparingByKey() { + return (Comparator<Map.Entry<K, V>> & Serializable) + (c1, c2) -> c1.getKey().compareTo(c2.getKey()); + } + + /** + * Returns a comparator that compares {@link Map.Entry} in natural order on value. + * + * <p>The returned comparator is serializable. Note that a null value in + * the map will cause the returned comparator to throw {@link + * NullPointerException}. + * + * @param <K> key type + * @param <V> {@link Comparable} value type + * @return A comparator that compares {@link Map.Entry} in natural order on value. + * @see Comparable + */ + public static <K, V extends Comparable<? super V>> Comparator<Map.Entry<K,V>> comparingByValue() { + return (Comparator<Map.Entry<K, V>> & Serializable) + (c1, c2) -> c1.getValue().compareTo(c2.getValue()); + } + + /** + * Returns a comparator that compares {@link Map.Entry} by key using the given + * {@link Comparator}. + * + * <p>The returned comparator is serializable if the specified + * comparator is also serializable. + * + * @param <K> key type + * @param <V> value type + * @param cmp the key {@link Comparator} + * @return A comparator that compares {@link Map.Entry} by the key. + */ + public static <K, V> Comparator<Map.Entry<K, V>> comparingByKey(Comparator<? super K> cmp) { + Objects.requireNonNull(cmp); + return (Comparator<Map.Entry<K, V>> & Serializable) + (c1, c2) -> cmp.compare(c1.getKey(), c2.getKey()); + } + + /** + * Returns a comparator that compares {@link Map.Entry} by value using the given + * {@link Comparator}. + * + * <p>The returned comparator is serializable if the specified + * comparator is also serializable. + * + * @param <K> key type + * @param <V> value type + * @param cmp the value {@link Comparator} + * @return A comparator that compares {@link Map.Entry} by the value. + */ + public static <K, V> Comparator<Map.Entry<K, V>> comparingByValue(Comparator<? super V> cmp) { + Objects.requireNonNull(cmp); + return (Comparator<Map.Entry<K, V>> & Serializable) + (c1, c2) -> cmp.compare(c1.getValue(), c2.getValue()); + } } // Comparison and hashing /**