
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秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
js的严格模式
2021-05-09
idea的安装和无限期试用
2021-05-09
Oracle VM VirtualBox安装PVE虚拟机
2021-05-09
【转】如何用css限制文字长度,使溢出的内容用省略号…显示
2021-05-09
Android MediaPlayer setDataSource failed
2021-05-09
ASP.NET Core 实战:Linux 小白的 .NET Core 部署之路
2021-05-09
【nodejs原理&源码杂记(8)】Timer模块与基于二叉堆的定时器
2021-05-09
大前端的自动化工厂(1)——Yeoman
2021-05-09
数据仓库建模方法论
2021-05-09
虚拟机搭建hadoop环境
2021-05-09
DataStax Bulk Loader教程(四)
2021-05-09
物联网、5G世界与大数据管理
2021-05-09
Cassandra与Kubernetes
2021-05-09
.NET应用框架架构设计实践 - 概述
2021-05-09
Rust 内置 trait :PartialEq 和 Eq
2021-05-09
Hibernate(十四)抓取策略
2021-05-09
[菜鸟的设计模式之旅]观察者模式
2021-05-09
Spring-继承JdbcDaoSupport类后简化配置文件内容
2021-05-09
Java基础IO流(一)
2021-05-09