Java8 Map接口新增方法使用的lambda

1352040452 发布于 前天 16:48
阅读 340
收藏 0

华为开发者社区年中盛会,参与瓜分1亿码豆!>>>

 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());
}

这个是Map.Entry中的方法,最后一行:(c1, c2) -> c1.getKey().compareTo(c2.getKey());实在看不懂这行,这行lambda表达式是传入哪个接口函数里呢?然后我百度:

1.我看Comparator里面有不止一个抽象方法,不是接口里只有一个方法时才能才能用这表达式吗?

2.还有就是最上面的代码里的这个表达式能传入接口是根据什么确定的哪个接口里的函数,(Comparator<Map.Entry<K, V>> & Serializable) 还是public static <K extends Comparable<? super K>, V> Comparator<Map.Entry<K,V>> comparingByKey() 指定的?

加载中
0
Kit_lee
Kit_lee

1、Comparator你可以再细心看看,只有int compare(o1, o2)这个抽象方法。其他都是实体方法。至于boolean equals(obj)那是@FunctionInterface赋与额外定义的抽象方法,但这些方法是Object原来有的public方法。所以唯一需要实现的只有这么一个。你的理解是没错的。

2、(Comparator<Map.Entry<K, V>> & Serializable)就是那句指定的

0
wy65
wy65

(c1, c2) -> c1.getKey().compareTo(c2.getKey()); 换个写法你就懂了

new Comparator< K extends Comparable<? super K> >() {

    public int compare(K c1, K c2) {

       return   c1.getKey().compareTo(c2.getKey());

   }

}

返回顶部
顶部