一、Lambda表达式
是jdk8引入的一个新特性和操作符
1.语法
操作符号:->
Lambda表达式分为两个部分:
- 左侧:参数列表
- 右侧:执行体
语法1:无参,无返回值
//不使用Lambda表达式
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("那你好");
}
};
//使用Lambda表达式
Runnable runnable2 = () -> {System.out.println();};
语法2:一个参数,无返回值
//未使用
Consumer<Integer> consumer=new Consumer<Integer>() {
@Override
public void accept(Integer integer) {
System.out.println(integer);
}
};
//使用
Consumer<Integer> consumer2=(Integer integer)->{System.out.println(integer);};
语法3:数据类型可省略
Consumer<Integer> consumer2=(integer)->{System.out.println(integer);};
语法4:一个参数时,()可以省略
Consumer<Integer> consumer2=integer->{System.out.println(integer);};
语法5:执行体只有一句时,return和{}都可以省略
Comparator<String> comparator = new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
};
Comparator<String> comparator1= (o1, o2) -> o1.compareTo(o2);
2.规则总结
->的左边:lambda形参列表,参数的类型都可以省略。如果形参只有一个,则一对()也可以省略
->的右边:如果方法体中只有一行执行语句,则一对0可以省略。如果有return关键字则必须一并省略
3.函数式接口
凡是@FunctionalInterface 注解修饰的接口都是函数式接口,只有一个抽象方法
四大核心函数式接口

二.方法引用
方法引用可以当作是对Lambda表达式的进一步简化
格式1:对象::实例方法名
PrintStream ps = System.out;
Consumer<String> con = ps::println;
格式2:类::静态方法
Comparator<Integer> comparator1=Integer::compare;
格式3:类::实例方法
Comparator<String> comparator1=String::compareTo;
1023

被折叠的 条评论
为什么被折叠?



