Lambda表达式的基本作用:
简化函数式接口的匿名内部类的写法.
(函数式接口:有且仅有一个抽象方法的接口,接口上方可加@FunctionalInterface注解)
代码演示:(匿名内部类方式)
public class LambdaDemo1 {
public static void main(String[] args) {
//匿名内部类
method(new run() {
@Override
public void running() {
System.out.println("正在跑步");
}
});
}
public static void method(run r){
r.running();
}
}
//接口
interface run{
public abstract void running();
}
Lambda方式
//匿名内部类
method( ()-> {
System.out.println("正在跑步");
}
);
}
public static void method(run r){
r.running();
}
}
//接口
@FunctionalInterface//进行判断是不是正确的函数式接口
interface run{
public abstract void running();
}
使用Lambda表达式前提:必须是接口的匿名内部类,接口只有一个抽象方法
Lambda的省略规则:
1.参数类型可以省略
2.如果只有一个参数,参数类型可以不写.同时()可以省略
3.如果Lambda表达式方法体只有一行,大括号,分号,return可以省略, 要省略必须同时省略
省略前:
public class LambdaDemo1 {
public static void main(String[] args) {
Integer[] arr = {2, 3, 1, 4};
//进行数据排序输出
Arrays.sort(arr, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1-o2;
}
});
System.out.println(Arrays.toString(arr));
}
}
省略后:
public class LambdaDemo1 {
public static void main(String[] args) {
Integer[] arr = {2, 3, 1, 4};
//省略后:
Arrays.sort(arr, ( o1, o2) -> o1 -o2);
System.out.println(Arrays.toString(arr));
}
}