java 定义lambda_五分钟学会Java中的Lambda表达式

Java中的Lambda表达式Lambda表达式是什么

Lambda表达式是一个匿名函数,是在jdk1.8中添加的

在jdk1.8之前,我们只能使用匿名方法和继承接口来实现接口中定义的方法

Lambda表达式的使用也是有限制的,Lambda表达式只能在接口中有且只有一个未实现的方法中使用

a83ca3ca54667cd05998a10bc3757a61.png

因此,在jdk1.8中还添加了一个 default的关键字,被default所标注的方法必须写一个默认实现

Lambda表达式的简单用法

首先我们先定义几个接口,这些接口的定义只是为了展示Lambda表达式的方便

/*** 无返回值的接口* @author Administrator**/interface SingleParameter{void printin(Object msg);}/*** 有返回值的接口* @author Administrator**/interface SingleParameterReturn{Integer triploid(Integer num);}/*** 多参数有返回值的接口* @author Administrator**/interface MultiParameterReturn{Integer triploid(Integer num,Integer num2);}/*** 无参有返回值的接口* @author Administrator**/interface PersonCreater {Person getPerson();}/*** 返回值对象* @author Administrator**/class Person{private LambdaDemo demo;public Person(){demo=LambdaDemo.getLambdaDemo();}public LambdaDemo getDemo() {return demo;}}

定义好接口后我们来使用Lambda表达式来操作

SingleParameter singleParameter=s->{System.err.println(s);}; // 这是无返回值的lambda表达式singleParameter.printin("这是无返回值的lambda表达式");

因为

SingleParameter 接口中只有一个

void printin(Object msg); 方法未实现

所以

s->{System.err.println(s);}; 这条代码我们可以看成是实现了那个方法

s代表方法中的msg

->代表指向方法体

{System.err.println(s);}代表方法的实现

无返回值的方法实现了我们再来看有返回值的SingleParameterReturn是怎么实现的

SingleParameterReturn singleParameterReturn=s->s*3; // 这是无返回值的lambda表达式System.err.println(singleParameterReturn.triploid(12));

SingleParameterReturn中的未实现方法是

Integer triploid(Integer num);

然而我们在上面的代码中只写了这么一小段代码就能代替这个方法

s->s3

s还是一样代表方法中的num

->指向方法体

s3其实是等于 return s*3;的 上面那个只是一种简写

既然单参数的都理解了,那么我们再来看多参数的Lambda表达式

MultiParameterReturn multiParameterReturn=(s,m)->s*m; // 这是有返回值的多参数的lambda表达式 多参数时必须加上小括号System.err.println(multiParameterReturn.triploid(12,30));

MultiParameterReturn 中的未实现方法是

Integer triploid(Integer num,Integer num2);

Lambda表达式是

(s,m)->sm

其实聪明的人已经看出来这是什么意思了

s代表num

m代码num2

->指向方法体

sm其实就是返回两个数相乘

既然单参数多参数的都理解了,那么我们难度升级 Lambda表达式中调用其他类的方法

SingleParameter singleParameter2=System.err::println; // 这是调用其他类的方法的lambda表达式singleParameter2.printin("这是调用其他类的方法的lambda表达式");

System.err::println;

这条代码的意思其实很简单

::前是调用的对象

::后是调用的方法

这就相当于用System.err.println();来代替我们的方法

看似难度升级,其实理解了也是一样简单

我们再来最后一个使用Lambda表达式来创建实现方法中的对象对象

PersonCreater p1=()->new Person(); //这是创建对象的lambda表达式PersonCreater p2=Person::new; //这是创建对象的lambda表达式 这种写法等价于上面那种写法System.err.println(p1.getPerson().getDemo()==p2.getPerson().getDemo());

第一个是不是贼简单

()代表空方法

->执行方法体

new Person() 实现方法返回创建的对象

第二个可能稍微难一点

但看到他两都是创建这个接口对象,那就说明

()->new Person();和Person::new;

内部实现是一样的

Person就是代表操作对象

new 代表创建这个对象

所有最后就是返回创建的对象

以上就是Lambda的简单使用

Lambda表达式的使用场景

最简单的例子

List中的forEach

他就是将Lambda的使用展现的淋漓尽致

他不仅减少了代码的数量还提高的代码的运行速度

从List的使用来看

Lambda表达式不出意外的话将会是以后开发的趋势

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值