JDK源码阅读之Entry

2018-01-30  本文已影响0人  GeorgeDon
Entry<K,V>

接口Entry<K,V> 是Map<K,V>的内部接口,该接口是用来表示一个键值对的,一个这样的实例就包含K类型的键和V类型的值。包含获取Key、获取value以及设置value的方法,同时需要重写equals和hashCode方法。
该接口有四中方式获取比较器:
如果K类型或者V类型的父类包含K和V实现了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没有实现Comparable接口,则需要对齐父类构建自定义比较器(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());
        }
    }

通过这个例子我们也能够获取Comparator和Comparable的不同

上一篇下一篇

猜你喜欢

热点阅读