
Entry<K,V>
接口Entry<K,V> 是Map<K,V>的內(nèi)部接口,該接口是用來表示一個(gè)鍵值對(duì)的,一個(gè)這樣的實(shí)例就包含K類型的鍵和V類型的值。包含獲取Key、獲取value以及設(shè)置value的方法,同時(shí)需要重寫equals和hashCode方法。
該接口有四中方式獲取比較器:
如果K類型或者V類型的父類包含K和V實(shí)現(xiàn)了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());
}
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());
}
如果K類型或者V類型的父類包含K和V沒有實(shí)現(xiàn)Comparable接口,則需要對(duì)齊父類構(gòu)建自定義比較器(Comparator<? super K> cmp):
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());
}
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());
}
}
通過這個(gè)例子我們也能夠獲取Comparator和Comparable的不同