五分钟学会Java中的Lambda表达式

Java中的Lambda表达式

Lambda表达式是什么

Lambda表达式是一个匿名函数,是在jdk1.8中添加的
在jdk1.8之前,我们只能使用匿名方法和继承接口来实现接口中定义的方法
Lambda表达式的使用也是有限制的,Lambda表达式只能在接口中有且只有一个未实现的方法中使用
因此,在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
->指向方法体
s
3其实是等于 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
->指向方法体
s
m其实就是返回两个数相乘

既然单参数多参数的都理解了,那么我们难度升级 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表达式不出意外的话将会是以后开发的趋势

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值