看Map的内部接口Entry<K,V>时看不懂其内的方法Comparable

看Java的源码Map的接口Entry<K,V>时看不懂其内方法的书写方式

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

看不懂这种写法。求解释!

阅读 2.6k
1 个回答

(Comparator<Map.Entry<K, V>> & Serializable)表示将结果强制转换为一个实现了Serializable接口的Comparator对象
这是Java8的语法,表示同时强制转换为多种类型

(c1, c2)->c1.getKey().compareTo(c2.getKey())相当于匿名内部类:

new Comparator<T>(){
    @Override
    public int compare(T c1, T c2) {
        return c1.getKey().compareTo(c2.getKey());
    }
}

同样是Java8的语法,Lambda表达式

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题