总结 lambda 使用
@FunctionalInterface
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface FunctionalInterface {}
函数式接口: 注解用于接口,只允许有一个抽象函数
- java.lang.Runnable,
- java.awt.event.ActionListener,
- java.util.Comparator,
- java.util.concurrent.Callable
- java.util.function包下的接口,如Consumer、Predicate、Supplier等
lambda
基本语法:
(parameters) -> expression 或 (parameters) ->{ statements; }
当 statements 只包含一句语句时可以省略 { }
示例
- 编写函数式接口
@FunctionalInterface
interface MyInterface2{
public abstract int method(int x,int y);
}
- 将接口作为函数参数
private static void test2(MyInterface2 myInterface2,int x,int y){
myInterface2.method(x,y);
}
- 调用方法,使用lambda 表达式
test2((x,y)->{
int sum = x + y;
return sum;
},2,3);
- 可以转换为
test2((x,y)->x + y,2,3);
格式
完整格式
(int x, int y )->{
int sum = x + y;
return sum;
}
省略参数类型
(x, y )->{
int sum = x + y;
return sum;
}
省略参数括号
当参数列表包含一个参数时可以省略
()
,参数的数据类型不许一块省略
x->{
int double_nu = x * 2;
return double_nu;
}
省略大括号
当实现方法的语句只包含一句,或直接返回值时可以省略
(int x, int y ) -> x + y
(int x) -> 2 * x