1 简介
简化调用匿名内部类,优点代码简洁,缺点需要程序员水平高。并且lambda表达式简化接口方法,该接口必须只能有一个方法,并且被实现了。
2 使用规范
2.1 标准格式
(参数列表) ‐> {方法体}
格式说明:
可选大括号
() -> new Student();() -> {new Student();}
2.3 只有一个参数的lambda表达式
括号可选
x ‐> {System.out.println(x);return x;}(x) ‐> {System.out.println(x);return x;}
2.4 多个参数的lambda表达式
括号必须
(int x,int y) ‐>{System.out.println(x);System.out.println(x);return x+y;}
类型可选
(x,y) ‐>{System.out.println(x);System.out.println(x);return x+y;}
2.5 一个参数和语句的lambda表达式
可选return
x ‐> 3+x;x ‐> return 3+x;
3 代码实现
3.1 无参无返回值
3.1.1 创建获取时间方法
@FunctionalInterface :修饰函数式接口的,要求接口中的抽象方法只有一个。
/*** 无参无返回值*/@FunctionalInterfacepublic interface Time {/*** 获取现在的时间*/void getNowTime();}
3.1.2 无参数无返回无Lambda表达式
/*** 无参数无返回无Lambda表达式*/@Testpublic void noParamNoVoidForNoLambda() {Time time = new Time() {@Overridepublic void getNowTime() {System.out.println("现在的时间:"+new Date());}};time.getNowTime();}
3.1.3 无参数无返回有Lambda表达式
/*** 无参数无返回有Lambda表达式*/@Testpublic void noParamNoVoidForLambda() {Time time = () -> {System.out.println("现在的时间:"+new Date());};time.getNowTime();}
3.1.4 以方法调用的lambda表达式
```java /**
- 以方法调用的lambda表达式
*/
@Test
public void noParamNoVoidForLambdaFunction() {
getNowTime(() -> {
}); }System.out.println("现在的时间:" + new Date());
public void getNowTime(Time time) { time.getNowTime(); }
<a name="fsGl1"></a>## 3.2 多参数无返回<a name="O6k4Q"></a>### 3.2.1 创建获取天数和月数```java/*** 多参数无返回*/@FunctionalInterfacepublic interface Week {/*** 获取星期几* @param date 日* @param month 月*/void getDay(int date,int month);}
3.2.2 多参数无返回无Lambda表达式
/*** 多参数无返回无lambda表达式*/@Testpublic void haveParamNoVoidNoLambda() {Week week = new Week() {@Overridepublic void getDay(int date, int month) {System.out.println("data:" + date + ",month:" + month);}};week.getDay(10,2);}
3.2.3 多参数无返回有lambda表达式
/*** 多参数无返回有lambda表达式*/@Testpublic void haveParamNoVoidForLambda(){Week week =(date, month) -> {System.out.println("data:" + date + ",month:" + month);};week.getDay(20,3);}
3.3 多参数返回值
3.3.1 创建食物方法
@FunctionalInterfacepublic interface Food {int compareTo(int o1,int o2);}
3.3.2 多参数返回值有lambda表达式
@Testpublic void haveParamHaveVoidLambda() {Food food = (o1, o2) -> o1 + o2;int result =food.compareTo(3,2);System.out.println(result);}
