[重走长征路]Lambda表达式和方法引用

文章介绍了Lambda表达式的基本使用,如`(o1,o2)->Integer.compare(o1,o2)`,以及其格式,强调Lambda是一个接口实现的对象和匿名函数。函数式接口是只有一个抽象方法的接口,如Consumer、Supplier、Function和Predicate。方法引用作为Lambda的补充,允许直接使用已有方法实现接口。文章还提到方法引用的三种形式:对象::实例方法、类::静态方法和类::实例方法。
摘要由CSDN通过智能技术生成
1/Lambda表达式使用举例:
(o1.o2) ->Integer.compare(o1,o2);
2/Lambda表达式的格式举例:
->:lambda操作符或箭头操作符
->箭头的左边:lambda形参列表;对应着要重写的接口的抽象方法的形参列表。
->右边:重写的分方法的方法体:Lambda对应的接口的实现类
、lambda表达式的本质是什么?
一方面作为接口实现类的对象, lambda表达式是一个对象
另一方面,lambda是一个匿名函数。
4函数式接口
4.1什么是函数式接口,为什么需要函数式接口?
如果接口中之声明一个抽象方法,则此接口就成为函数式接口,
只有函数式接口才可以使用lambda表达式
四个常见的函数式接口 :
Consumer<T> 消费型接口 对应的抽象方法:void accept(T t)
Suppile<T> 供给型接口  : T get()
Function<T,R> 函数型接口 :R apply(T t )
Predicate<T> 判断型接口 : boolean test(T t)
语法总结
箭头的左边:lambda形参列表,参数的类型可以省略、如果参数只有一个,则括号都可以省略,没有参数不可以省略
箭头的右边:lambda方法体,对应的重写的方法的方法体。如果方法体只有一行执行语句 则可以省略掉大括号,如果有ruturn则rturnye必须省略掉
方法引用
Integer :: compare;
方法引用可以看做基于lambda的进一步刻画,
当需要提供一个函数式接口的实例时,我们可以使用lambda表达式提供实例
     当满足一定条件的情况下,我们还可以使用方法引用或者构造器引用。
 方法引用的本质是:
 作为函数式接口的实例。
 格式  ::
 类(对象) :: 方法名
 具体说明:
 1、对象::实例方法
 要求:函数式接口中抽象方法a与其内部实现时调用的方法的某个方法b的形参列表和返回值类型都相同,可以考虑使用方法b实现对方法a的覆盖、替换。覆盖和替换即为方法引用
 此方法为非静态方法,需要对象进行调用
 2、类 ::静态方法,
 要求:函数式接口中抽象方法a与其内部实现时调用的方法的某个方法b的形参列表和返回值类型都相同,可以考虑使用方法b实现对方法a的覆盖、替换。覆盖和替换即为方法引用
 此方法为静态方法,需要对象进行调用
 3、类:: 实例方法
 要求:函数式接口中抽象方法a与其内部实现时调用的方法的某个方法b的返回值类型相同,同时抽象方法a中有n个参数,方法b中有n-1个参数,且抽象方法a的第一个参数作为方法b
 的后n-1个参数与方法b的n-1的参数类型一致。则可以考虑使用b实现对a的替换。覆盖
 注意:此方法b是非静态的方法,需要对象调用。但是形式上写出对象a的所属类
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值