Java8 学习笔记--函数式接口与lambda表达式的关系

在java中,lambda表达式与函数式接口是不可分割的,都是结合起来使用的。java

对于函数式接口,咱们能够理解为只有一个抽象方法的接口,除此以外它和别的接口相比并无什么特殊的地方。为了确保函数式接口的正确性,咱们能够给这个接口添加@FunctionalInterface注解(固然,也能够不加此注解),这样当其中有超过一个抽象方法时就会报错。函数

对于其余类型的接口,咱们想要使用就须要定义一个类(或者使用匿名类)来实现那个接口和其中的方法,而函数式接口除了使用普通的方法来实现以外,还有一种更加简单的方法---就是使用lambda表达式。lambda表达式咱们能够理解对于函数式接口和其中的抽象方法的具体实现,这样当有一个须要函数式接口参数的方法时,咱们就能够给其传递一个对应的lambda表达式做为参数。执行的时候就会自动执行函数式接口中的惟一方法,也就是传递过去的lambda表达式了。spa

下面咱们来举一个例子具体说明一下:code

有以下代码List<String> list = Arrays.asList("d", "h", "a", "z", "b");blog

咱们要对其进行排序,有一个对应的list.sort(Comparator<? super E> c)方法,须要咱们传递一个Comparator接口的实例,而Comparator之中惟一的抽象方法为int compare(T o1, T o2),彻底符合咱们以前的函数式接口的定义,而且它还使用了@FunctionalInterface注解,因此除了普通的实现方法以外咱们可使用lambda表达式来实现这个方法,具体代码以下:排序

List<String> list = Arrays.asList("d", "h", "a", "z", "b");
list.sort((String a, String b) -> {
    return a.compareTo(b);
});

其至关于:接口

List<String> list = Arrays.asList("d", "h", "a", "z", "b");
Comparator<String> comparator = (String a, String b) -> {
    return a.compareTo(b);
};  // 使用lambda表达式实现函数式接口,并赋值
list.sort(comparator);

固然,对于上面的lambda表达式有不少简略写法,这是主要说明它和函数式接口的关系,关于lambda表达式的其余不少的使用方法你们能够去具体查询使用。io

相关文章
相关标签/搜索