1.函数式接口与lambda表达式
什么是函数式接口?
有且只有一个抽象方法的接口,可以有default,static等关键字修饰的方法,以及重写超类Object的equals等方法,就可以称之为函数式接口。
作用:
-
代码简介,开发迅速
-
方便函数式编程
-
非常容易进行并行计算
-
Java引入Lambda,改善了集合操作(引入Stream API),并可以利用到Lambda表达式的延后性
辨别:
函数式接口有functioninterfa修饰,当自己创建函数式接口时也记得加,这样当你书写的接口不是函数式接口时会标红提醒。
Lambda表达式
Lambda表达式可以看作一个匿名函数,允许把函数作为一个方法的参数,使用lambda表达式可以使代码更加简洁紧凑,可以作为方法的参数和返回值。
组成:
(parameters) -> expression 或 (parameters) ->{ statements; }
1.(paramaters):使用的是函数接口的参数列表,参数可以声明类型也可以不写,当只有一个参数时,可以将小括号省略。
2.->:将参数传递给后面的方法体。
3方法体:可以是表达式和代码块,是函数式接口里面方法的实现。
使用
public class Test01 {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("sss");
System.out.println(isNull(a -> {
if (list.size() == 0) {
return true;
}
return false;
}, list)); }
static boolean isNull(Predicate predicate, List list){
return predicate.test(list);
}
static boolean isPrime(Predicate predicate,Integer s){
return predicate.test(s);
}
变量捕获
lambda表达式智能引用标记了final的外层局部变量,在lambda内部修改定义在域外的局部变量,否则会发生错误
Lambda在集合中的应用
Collection接口
ArrayList<String> list = new ArrayList();
list.add("which");
list.add("cat");
list.add("cd");
list.add("ls");
list.forEach(s -> System.out.println(s));
结果