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 :修饰函数式接口的,要求接口中的抽象方法只有一个。
/**
* 无参无返回值
*/
@FunctionalInterface
public interface Time {
/**
* 获取现在的时间
*/
void getNowTime();
}
3.1.2 无参数无返回无Lambda表达式
/**
* 无参数无返回无Lambda表达式
*/
@Test
public void noParamNoVoidForNoLambda() {
Time time = new Time() {
@Override
public void getNowTime() {
System.out.println("现在的时间:"+new Date());
}
};
time.getNowTime();
}
3.1.3 无参数无返回有Lambda表达式
/**
* 无参数无返回有Lambda表达式
*/
@Test
public 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
/**
* 多参数无返回
*/
@FunctionalInterface
public interface Week {
/**
* 获取星期几
* @param date 日
* @param month 月
*/
void getDay(int date,int month);
}
3.2.2 多参数无返回无Lambda表达式
/**
* 多参数无返回无lambda表达式
*/
@Test
public void haveParamNoVoidNoLambda() {
Week week = new Week() {
@Override
public void getDay(int date, int month) {
System.out.println("data:" + date + ",month:" + month);
}
};
week.getDay(10,2);
}
3.2.3 多参数无返回有lambda表达式
/**
* 多参数无返回有lambda表达式
*/
@Test
public void haveParamNoVoidForLambda(){
Week week =(date, month) -> {
System.out.println("data:" + date + ",month:" + month);
};
week.getDay(20,3);
}
3.3 多参数返回值
3.3.1 创建食物方法
@FunctionalInterface
public interface Food {
int compareTo(int o1,int o2);
}
3.3.2 多参数返回值有lambda表达式
@Test
public void haveParamHaveVoidLambda() {
Food food = (o1, o2) -> o1 + o2;
int result =food.compareTo(3,2);
System.out.println(result);
}