程序员如何使代码简洁,Lambda表达式入门之四大引用(下篇

这说明一个Lambda表达式可以有多个目标类型(函数接口),只要函数匹配成功即可。但需注意一个Lambda表达式必须至少有一个目标类型

Lambda的域以及访问限制

域即作用域,Lambda表达式中的参数列表中的参数在该Lambda表达式范围内(域)有效。在作用Lambda表达式内,可以访问外部的变量:局部变量、类变量和静态变量,但操作受限程度不一

1、访问局部变量

在Lambda表达式外部的局部变量会被JVM隐式的编译成final类型,因此只能访问外而不能修改。

2、访问静态变量和成员变量

在Lambda表达式内部,对静态变量和成员变量可读可写。

内置函数式接口

小伙伴们有没有发现,如果使用Lambda表达式,还是需要我们自己写一个接口定义的,其实很多接口无非是入参类型和返回值不一样而已,所以Java给我们提供了几个常用的标准函数接口:

Consumer< T >con 消费型接口: void accept(T t);Supplier< T >sup供给型接口 : T get();Function< T , R >fun 函数型接口 : R apply (T t);Predicate< T >:断言型接口 : boolean test(T t);

1、Consumer消费型接口

接口中的方法为 void accept(T t),1个参数,无返回值。调用方要传入值,而不需要返回,形象比喻成消费型

这个就是对传入num参数值,进行相关的处理(消费)。到底进行处理,具体就在

(num) -> System.out.println(“消费了” + num)

上面的代码中,是一个典型的1个参数,无返回值的消费;如果没有内置的函数接口,那我们就需要自己定义一个,如:

interface MyConsumer{
void doFunction(T t);
}

我们发现和内置函数接口,没有什么区别,就是接口名和方法名称不一样而已,其实本质是一样的,这就是为什么Java会提供一些内置的函数,这样可以减少大量的代码。

2、Supplier供给型接口

接口中的方法 T get(),无参数,有返回值;不需要对方给参数,而是一直返回给对方,形象定义为供给型接口

上面代码就是返回一个新的实体对象。

3、Function函数式接口

接口中的方法 R apply (T t),有参数,有返回值;典型的函数,所以形象比喻成函数型接口

接口实现转换成大写的字符。

4、Predicate断言型接口

接口中方法 boolean test(T t),有参数,返回boolean,是一个条件检查式方法,比喻成断言型接口

内置的函数接口,大大的提高开发的效率,减少了开发代码

方法引用

方法引用是Lambda表达式的一个简化写法,其语法结构为:

ObjectRef::methodName

左边可以是类名或者实例名,中间是方法引用符号“::”,右边是相应的方法名。方法引用可以分为三类。

**使用前提:**Lambda体中调用方法的参数列表和返回值类型,要和函数式接口中抽象方法的参数列表和返回值类型保持一致

静态方法引用

先上一个案例

上面的代码中,我们发现Converter匿名类重载方法中,调用了ReferenceTest的静态方法String2Int。再有函数接口的方法参数类型 和 返回值类型,跟String2Int是一样的,入参为String,返回值为Integer。那我们这个时候可以简化成

直接用静态方法进行赋值,是不是很简洁。

实例方法引用

如果函数式接口的实现恰好可以通过调用一个实例的实例方法来实现,那么就可以使用实例方法引用

对象方法引用

抽象方法的第一个参数类型刚好是实例方法的类型(函数式接口的抽象方法必须要有输入参数)抽象方法剩余的参数恰好可以当做实例方法的参数

如果函数式接口的实现能由上面说的实例方法调用来实现的话,那么就可以使用对象方法的引用**(两个条件都要满足)**

我们看到第一参数Prod s,和实例对象new Prod是同一个类型;剩余的参数s1,正好是实例方法fun的参数;这样就可以简化成Prod::fun

构造方法引用

如果函数式接口的实现恰好可以通过调用一个类的构造方法来实现,那么就可以使用构造方法引用,语法【类名::new】

上面是无参数的构造函数,再来看看有参构造函数

到这里,老顾来个方法引用的总结:


数,再来看看有参构造函数

[外链图片转存中…(img-mxrSzyUi-1651660675365)]

到这里,老顾来个方法引用的总结:

[外链图片转存中…(img-mIH1SLXs-1651660675365)]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值