java的lambda表达式

lambda表达式

Lambda表达式的简介

Lambda表达式的使⽤场景

通常来讲, 使⽤lambda表达式, 是为了简化接⼝实现的。
关于接⼝实现, 可以有很多种⽅式来实现。 例如: 设计接⼝的实现类、 使⽤匿名内部类。 但是lambda表达式, ⽐这两种⽅式都简单

Lambda表达式对接⼝的要求

​ 虽然说, lambda表达式可以在⼀定程度上简化接⼝的实现。 但是, 并不是所有的接⼝都可以使⽤lambda表达式来简洁实现的。
​ lambda表达式毕竟只是⼀个匿名⽅法。 当实现的接⼝中的⽅法过多或者多少的时候, lambda表达式都是不适⽤的。
lambda表达式,只能实现函数式接⼝。

函数式接⼝

基础概念
如果说, ⼀个接⼝中, 要求实现类必须实现的抽象⽅法, 有且只有⼀个! 这样的接⼝, 就是函数式接⼝。

@FunctionalInterface

是⼀个注解, ⽤在接⼝之前, 判断这个接⼝是否是⼀个函数式接⼝。 如果是函数式接⼝, 没有任何问题。 如果不是函数式接⼝, 则会报错。 功能类似于@Override。

系统内置的若⼲函数式接⼝
在这里插入图片描述

在这里插入图片描述

Lambda表达式的语法

Lambda表达式的基础语法

lambda表达式, 其实本质来讲, 就是⼀个匿名函数。 因此在写lambda表达式的时候, 不需要关⼼⽅法名是什么。
实际上, 我们在写lambda表达式的时候, 也不需要关⼼返回值类型。
我们在写lambda表达式的时候, 只需要关注两部分内容即可: 参数列表 和 ⽅法体lambda表达式的基础语法:

(参数) -> {
	⽅法体
};

参数部分 : ⽅法的参数列表, 要求和实现的接⼝中的⽅法参数部分⼀致, 包括参数的数量和类型。
⽅法体部分 : ⽅法的实现部分, 如果接⼝中定义的⽅法有返回值, 则在实现的时候, 注意返回值的返回。
-> : 分隔参数部分和⽅法体部分

Lambda表达式的语法进阶

在上述代码中, 的确可以使⽤lambda表达式实现接⼝, 但是依然不够简洁, 有简化的空间。

参数部分的精简

参数的类型

由于在接⼝的⽅法中,已经定义了每⼀个参数的类型是什么。 ⽽且在使⽤lambda表达式实现接⼝的时候, 必须要保证参数的数量和类型需要和接⼝中的⽅法保持⼀致。 因此, 此时lambda表达式中的参数的类型可以省略不写。
注意事项:
如果需要省略参数的类型, 要保证: 要省略, 每⼀个参数的类型都必须省略不写。 绝对不能出现, 有的参数类型省略了, 有的参数类型没有省略。

// 多个参数、⽆返回值的⽅法实现
NoneReturnMutipleParameter lambda1 = (a, b) -> {
   
	System.out.println("多个参数、⽆返回值⽅法的实现: 参数a是
" + a + ", 参数b是 " + b);
};

参数的⼩括号
如果⽅法的参数列表中的参数数量 有且只有⼀个 ,此时,参数列表的⼩括号是可以省略不写的。
注意事项:
只有当参数的数量是⼀个的时候, 多了、少了都不能省略。
省略掉⼩括号的同时, 必须要省略参数的类型

// 有参、⽆返回值的⽅法实现
NoneReturnSingleParameter lambda2 = a -> {
   
	System.out.println("⼀个参数、⽆返回值⽅法的实现: 参数是 "
+ a);
};
⽅法体部分的精简

⽅法体⼤括号的精简
当⼀个⽅法体中的逻辑, 有且只有⼀句的情况下, ⼤括号可以省略。

return的精简
如果⼀个⽅法中唯⼀的⼀条语句是⼀个返回语句, 此时在省略掉⼤括号的同时, 也必须省略掉return。

SingleReturnMutipleParameter lambda3 = (a, b) -> a + b;

函数引⽤

​ lambda表达式是为了简化接⼝的实现的。 在lambda表达式中, 不应该出现⽐较复杂的逻辑。 如果在lambda表达式中出现了过于复杂的逻辑, 会对程序的可读性造成⾮常⼤的影响。 如果在lambda表达式中需要处理的逻辑⽐较复杂, ⼀般情况会单独
的写⼀个⽅法。 在lambda表达式中直接引⽤这个⽅法即可。
​ 或者, 在有些情况下, 我们需要在lambda表达式中实现的逻辑, 在另外⼀个地⽅已经写好了。 此时我们就不需要再单独写遍, 只需要直接引⽤这个已经存在的⽅法即可。
函数引⽤: 引⽤⼀个已经存在的⽅法, 使其替代lambda表达式完成接⼝的实现。

静态⽅法的引⽤

语法:
类::静态⽅法
注意事项:
在引⽤的⽅法后⾯, 不要添加⼩括号。
引⽤的这个⽅法, 参数(数量、类型) 和 返回值, 必须要跟接⼝中定义的⼀致。


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值