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
/**