Lambda 表达式支持将代码块作为方法参数
public class CommandTest
{
public static void main(String[] args)
{
var pa = new ProcessArray();
int[] target = [3,-4,6,4];
// 处理数组,具体处理行为取决于匿名内部类
pa.process(array,(int element)->{System.out.println("数组元素的平方是:"+element * element);});
}
}
interface Eatble
{
void taste();
}
interface Flyable
{
void fly(String weather);
}
interface Addable
{
int add(int a, int b);
}
public class LambdaQs
{
// 调用该方法需要Eatable 对象
public void eat(Eatable e)
{
System.out.println(e);
e.taste();
}
// 调用该方法需要Flyable 对象
public void drive(Flyable f)
{
System.out.println("我在驾驶"+ f);
f.fly("【碧空如洗的晴日】");
}
//调用该方法需要Addable 对象
public void test(Addable add)
{
System.out.println("5与3的和为:"+ add.add(5,3));
}
public static void main(String[] args)
{
var lq = new LambdaQs();
// Lambda表达式的代码块只有一条语句可以省略花括号
lq.eat(()->System.out.println("苹果的味道不错"));
//Lambda表达式的形参列表只有一个形参,可以省略圆括号
lq.drive(weather->{
System.out.println("今天天气是:"+ weather);
System.out.println("直升机飞行平稳");
});
//Lambda 表达式的代码块只有一条语句,可以省略花括号
// 代码块中只有一条语句,即使该表达式需要返回值,也可以省略return 关键字
lq.test((a,b) -> a+b);
}
}
Lambda 表达式的类型,也被称为“目标类型(target type)”