- 必须是函数式接口才可以使用Lambda表达式
- 中只有一个方法需要实现的接口 就可以称为函数式接口
- 接口上可以标记@FunctionalInterface注解的接口 都是函数式接口
- Lamdba表达式关键字 ->
- -> 左边: 接口方法中的形参 单个形参可以省略( )
- -> 右边: 接口中方法的具体实现或返回 如果实现中只有一个行实现或单个返回 可以省略return和{ }
| 函数式接口 | 参数类型 | 返回类型 | 用途 |
| —- | —- | —- | —- |
| Consumer
消费类型接口 | T | void | 对象类型为T的对象应用操作,包含方法void accept(T t) |
| Supplier
供给型接口 | 无 | T | 返回类型为T的对象,包含方法: T get() |
| Function
函数型接口 | T | R | 对象类型为T的对象应用操作,并返回结果.结果式R类型对象.包含方法:
R apply(T t) |
| Perdicate
断定型接口 | T | boolean | 确定类型为T的对象是否满足约束,并返回boolean值.包含方法:
boolean test(T t) |
示例 ```java /**
- @author:LYY
- @Date:2022/5/13
lambda表达式语法 */ public class LambdaTest {
/**
lambda表达式 无返回值 无形参实例 */ @Test void test01() { // 正常写法 VoidInterface voidInterface1 = new VoidInterface() {
@Override
public void show() {
System.out.println("我是正常接口匿名类");
}
}; voidInterface1.show();
System.out.println(“*“); // lambda表达式写法 VoidInterface voidInterface2 = () -> System.out.println(“lambda表达式写法!”); voidInterface2.show(); }
/**
lambda表达式 有返回值 有两个形参 */ @Test void test02() { // 正常写法 ReturnAndArgs returnAndArgs1 = new ReturnAndArgs(){
@Override
public String show(String name, int age) {
return "姓名:" + name + "年龄:" + age;
}
}; String show1 = returnAndArgs1.show(“张三”, 66); System.out.println(show1); System.out.println(“**“); // lambda表达式 ReturnAndArgs returnAndArgs2 = (name, age) -> “姓名:” + name + “年龄:” + age; String show2 = returnAndArgs2.show(“李四”, 77); System.out.println(show2); }
} /**
- @author LYY */ interface VoidInterface {
/**
* 无返回值 无形参的方法
*/
void show();
}
/**
- @author LYY
两个形参 和 存在返回值接口 */ interface ReturnAndArgs {
/**
- 返回姓名 年龄
- @param name
- @param age
- @return */ String show(String name, int age);
}
```