Lambda表达式
发布日期:2021-05-07 09:10:56 浏览次数:47 分类:精选文章

本文共 1929 字,大约阅读时间需要 6 分钟。

Lamda表达式

从JDK1.8开始为了简化使用者进行代码的开发,专门提供有Lambda表达式的支持,利用此操作形式可以实现函数式的编程,对于函数式的编程比较著名语言haskell、Scala,利用函数式的编程可以避免掉面向对象编程之中一些繁琐的处理问题。

面向对象在其长期发展之中,一直有一部分反对者,这些反对者认为面向对象的设计过于复杂,并且过于繁琐。

以一个最简单的程序为例

范例:观察传统开发中的问题

class  JavaDemo{	public static void main(String[] args) 	{		IMessage msg = new IMessage(){	//匿名内部类			public void send(String str){				System.out.println("消息发送:"+str);			}		};		msg.send("我是匿名内部类");	}}interface IMessage{	public void send(String str);}

结果:消息发送:我是匿名内部类

在这段代码之中核心功能就一行语句:“System.out.println("消息发送:"+str);”,但是为了这一句核心语句仍然要按照完整的面向对象给出的设计结构进行开发。于是这些问题随着技术的发展也是越来越突出。

范例:用Lambda表达式实现一样的功能

class  JavaDemo{	public static void main(String[] args) 	{		IMessage msg =(str)->{			System.out.println("发送消息:"+str);			};		msg.send("我是Lambda函数");	}}interface IMessage{	public void send(String str);}

结果:我是Lmbda函数

现在整个程序代码里面真的只是编写了一行语句,于是利用这种形式就避免了复杂的面向对象结构化的要求。

Lamda表达式如果想要使用,那么必须有一个重要的实现要求:SAM(Single Abstract Method),只有一个抽象方法。以上例为例,IMessage接口中只有一个send()方法,除此之外没有任何其他抽象方法,这样的接口就被称为函数式接口,而只有函数式接口才可以被Lambda表达式所使用

@FunctionalInterface	//函数式接口interface IMessage{	public void send(String str);}

对于Lambda表达式而言,提供有如下几种格式:

  • 方法没有参数:()->{};
  • 方法有参数:(参数,参数)->{};
  • 如果现在只有一行语句返回:(参数,参数)->语句;

范例:定义没有参数的方法

class  JavaDemo{	public static void main(String[] args) 	{		IMessage msg =()->{			System.out.println("无参");			};		msg.send();	}}@FunctionalInterface	//函数式接口interface IMessage{	public void send();}

范例:定义有参数的处理形式

class  JavaDemo{	public static void main(String[] args) 	{		IMath math =(t1,t2)->{	//参数名可以自行取名			return t1+t2;		};		System.out.println(math.add(1,2));	}}@FunctionalInterface	//函数式接口interface IMath{	public int add(int x,int y);}

以上表达式只有一行语句,这个时候也可以进一步简化。

范例:简化Lambda操作

class  JavaDemo{	public static void main(String[] args) 	{		IMath math =(t1,t2)-> t1+t2;	//参数名可以自行取名		System.out.println(math.add(1,2));	}}@FunctionalInterface	//函数式接口interface IMath{	public int add(int x,int y);}

利用Lambda表达式的确可以摆脱传统面向对象之中关于结构的限制,使得代码更加简便。

上一篇:方法引用
下一篇:匿名内部类

发表评论

最新留言

不错!
[***.144.177.141]2025年04月06日 06时05分30秒