7.Lambda表达式

  1. 未用lambda表达式的效果

1. 因为Thread构造参数是一个接口,所以我才不得不用Runnable接口。
2. 因为接口不能直接new对象,所以我才不得不用一个实现类。
3. 因为单独定义一个Impl实现类太麻烦,所以我才不得不用匿名内部类。
4. 因为接口当中有抽象方法,所以我才不得不覆盖重写。
5. 因为覆盖重写有要求,所以我才不得不照抄一遍run方法,不能写错。
6. 而实际上,只有run方法的方法体才是我要真正做的事情。

 
每个方法其实都可以对应到“前中后”三点上:

前:小括号,方法的参数,前置条件。

中:大括号,方法体,具体要做什么事情。

后:返回值,最终产生什么结果。
对于Comparator当中的compare方法,也可以对应到三点上:

1. 前:两个参数,给我来两个对象,我才能比较。

2. 中:我要执行减法。

3. 后:我这个方法最终将会产生一个int结果。

同样三点,在Lambda表达式当中也可以进行体现。
 
引出lambda 表达式。
 
  1. 函数式编程思想(区别于面向对象思想)

Y=f(X);

函数式编程的优点:简单、直观,没有面向对象那么复杂的语法。

  1. Lambda体验

这个是对匿名内部类的复习并结合者lambda的使用

4. Lambda标准格式

(1) 一些参数

(2)一个箭头

(3)一些代码

格式:(参数) -> {方法体}

(一些参数) -> {方法体}

拿什么东西 ->  做什么事情

使用Lambda标准格式使用Runnable与Comparator接口

new Thread(() -> { System.out.println("abc"); }).start();

Arrays.sort(array, (Person a, Person b) -> { return a.getAge() - b.getAge(); })

5. Invoke关键字以及lambda注意事项

6. 省略格式的宗旨、注意事项

7. 使用Lambda省略格式使用Runnable与Comparator接口

new Thread(() -> System.out.println("abc")).start();

      Arrays.sort(array, (a, b) -> a.getAge() - b.getAge())

8. Lambda练习

- 能够通过Lambda的标准格式使用自定义的接口(有且仅有一个抽象方法)

- 能够通过Lambda的省略格式使用自定义的接口(有且仅有一个抽象方法)

      参见代码:

      MyInterfaceNoParam没有参数

      MyInterfaceOneParam一个参数

      MyInterfaceTwoParam两个参数

      MyInterfaceReturn

9. Lambda的使用前堤

Lambda的语法非常简洁,完全没有面向对象复杂的束缚。但是使用时有几个问题需要特别注意:

  1. 使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法。

无论是JDK内置的 Runnable 、 Comparator 接口还是自定义的接口,只有当接口中的抽象方法存在且唯一时,才可以使用Lambda。

  1. 使用Lambda必须具有上下文推断。

也就是方法的参数或局部变量类型必须为Lambda对应的接口类型,才能使用Lambda作为该接口的实例。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值