Java8 学习笔记--函数式接口与lambda表达式的关系
2017-04-23 10:35
721 查看
在java中,lambda表达式与函数式接口是不可分割的,都是结合起来使用的。
对于函数式接口,我们可以理解为只有一个抽象方法的接口,除此之外它和别的接口相比并没有什么特殊的地方。为了确保函数式接口的正确性,我们可以给这个接口添加@FunctionalInterface注解(当然,也可以不加此注解),这样当其中有超过一个抽象方法时就会报错。
对于其他类型的接口,我们想要使用就需要定义一个类(或者使用匿名类)来实现那个接口和其中的方法,而函数式接口除了使用普通的方法来实现之外,还有一种更加简单的方法---就是使用lambda表达式。lambda表达式我们可以理解对于函数式接口和其中的抽象方法的具体实现,这样当有一个需要函数式接口参数的方法时,我们就可以给其传递一个对应的lambda表达式作为参数。执行的时候就会自动执行函数式接口中的唯一方法,也就是传递过去的lambda表达式了。
下面我们来举一个例子具体说明一下:
有如下代码
我们要对其进行排序,有一个对应的
其相当于:
当然,对于上面的lambda表达式有很多简略写法,这是主要说明它和函数式接口的关系,关于lambda表达式的其他很多的使用方法大家可以去具体查询使用。
对于函数式接口,我们可以理解为只有一个抽象方法的接口,除此之外它和别的接口相比并没有什么特殊的地方。为了确保函数式接口的正确性,我们可以给这个接口添加@FunctionalInterface注解(当然,也可以不加此注解),这样当其中有超过一个抽象方法时就会报错。
对于其他类型的接口,我们想要使用就需要定义一个类(或者使用匿名类)来实现那个接口和其中的方法,而函数式接口除了使用普通的方法来实现之外,还有一种更加简单的方法---就是使用lambda表达式。lambda表达式我们可以理解对于函数式接口和其中的抽象方法的具体实现,这样当有一个需要函数式接口参数的方法时,我们就可以给其传递一个对应的lambda表达式作为参数。执行的时候就会自动执行函数式接口中的唯一方法,也就是传递过去的lambda表达式了。
下面我们来举一个例子具体说明一下:
有如下代码
List<String> list = Arrays.asList("d", "h", "a", "z", "b");
我们要对其进行排序,有一个对应的
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表达式的其他很多的使用方法大家可以去具体查询使用。
相关文章推荐
- Java学习笔记-Lambda表达式及內建函数式接口
- Java8 新特性----函数式接口,以及和Lambda表达式的关系
- java 函数式接口与lambda表达式的关系
- [学习笔记] Java核心技术 卷一:基础知识 接口、lambda表达式与内部类(三)
- java8学习之Lambda表达式初步与函数式接口
- java8之Lambda表达式 2:内建函数式接口
- java8新特性学习笔记(一) Lambda表达式
- java8新特性lambda表达式, 函数式接口以及Steam流和新的日期时间例子代码
- Java Lambda 表达式学习笔记
- Java 8 函数式接口、lambda表达式、方法以及构造器引用
- Java8学习笔记(一)-初步认识Lambda表达式
- 【学习笔记11】java面向对象-接口与类、接口与接口之间的关系
- Java8学习笔记 — 【Lambda表达式】
- Java8学习笔记----Lambda表达式 (转)
- Java8学习笔记(二)-函数式接口与方法引用
- java lambda表达式学习笔记
- Java8 新特性之一---------Lambda表达式和函数式接口
- 【转】Java8学习笔记(1) -- 从函数式接口说起
- 学习 Java 8 - 函数式接口 Lambda
- Java8新特性Lambda表达式、函数式接口