Lambda表达式
一.在学习Lambda之前,我们先来看一段代码:
1.代码前言
①我们首先定义一个Cook接口,里面有一个makeFood()方法
②又定义了一个测试类,其中的invokeCook方法内部调用Cook接口的makeFood方法,
最后使用匿名类去重写makeFood方法,
2.代码(不想看代码的可直接跳过,看第二条的总结说明)
public interface Cook { // 定义无参数无返回值的方法makeFood public abstract void makeFood(); } public class Demo01Cook { public static void main(String[] args) { invokeCook(new Cook() { @Override public void makeFood() { System.out.println("可以吃饭了"); } }); // 定义一个方法,参数传递Cook接口,方法内部调用Cook接口中的方法makeFood public static void invokeCook(Cook cook) { cook.makeFood(); } }
二.当我们看完上述代码后,我们会感到这段代码很复杂,但其实只是为了重写Cook接口的makeCook方法,输出“我要吃饭了”,其实使用Lambda可以简化代码
1.使用Lambda去实现上述代码
public class Demo01Cook { public static void main(String[] args) { // 使用Lambda表达式,简化匿名内部类的书写 invokeCook(() -> { System.out.println("又吃饭了"); }); } public static void invokeCook(Cook cook) { cook.makeFood(); } }
2.在学习lambda之前,我们先来了解两个概念:
(1)面向对象的思想:做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情
(2)函数式编程思想:只要能获取到结果,谁去做的都不重要,重视的是结果,不重视过程。Lambda表达式就是函数式编程思想的很好体现。
三.看完Lambda的书写,会感到很简单,下面我们来了解Lambda的书写规范
1.Lambda表达式的标准格式:
由三部分组成:
a.一些参数
b.一个箭头
c.一段代码
格式:
(参数列表) -> { 一些重写方法的代码 };
解释说明格式:
():接口中抽象方法的参数列表,没有参数,就空着;有参数就写出参数,多个参数使用逗号隔开
->:传递的意思,把参数传递给方法体{ }
{ }:重写接口的抽象方法的方法体
2.Lambda实例(上面是无参数,接下来演示是一个有参数的接口)
public interface Calculate { // 定义一个计算两个int整数和的方法并返回 public abstract int calc(int a,int b); } public class Demo01Calculator { public static void main(String[] args) { // 使用Lambda表达式简化匿名内部类的书写 invokeCalc(20,30,(int a,int b) ->{ return a+b; }); } public static void invokeCalc(int a, int b, Calculate c) { int sum = c.calc(a, b); System.out.println(sum); } }
3.Lambda表达式是可推导(凡是根据推导出来的内容,都可以省略书写)
可以省略的内容:
1).(参数列表):括号中参数列表的数据类型,可以省略不写
2).(参数列表):括号中的参数如果只有一个,那么类型和()都可以省略
3).{一些代码}:如果{ }中的代码只有一行,无论是否有返回值,都可以省略({ },return,分号)
注意:第三条要省略时:{ },return,分号必须一起省略