函数式编程--为什么会出现lambda表达式?
java一直处在发张和演化的过程中,其中有2个版本从根本上改变了代码的编写方式。第一个就是JDK5之后增加的泛型,还有一个就是现在介绍的函数式编程,lambda表达式。
lambda表达式是java8新增的功能,他们明显的增强了java,原因2点:
1),它们增加了新的语法元素,使java语言的表达能力得以提升,并流线化了一些常用结构的实现方法
2),lambda表达式的加入也导致了API库中增加了新的功能,比如说新的流API。
OK,理论点就不多说了,我们具体的引入2个例子来说明lambda出现的原因。我之所以要花时间整理这个东西出现的原因是因为我觉得很有必要,凡事在进步,当有一个新的东西出现的时候我们应该也必须知道这个东西出现的本质,这样子才能更好的利用这个东西。
我们先举一个例子:
1),当我们要在另一个独立线程中执行一个逻辑时,通常会将代码放在一个实现Runnable接口的类的run方法中,然后将这个实例提交到一个线程池中或者说直接启动这个线程,具体代码如下:
public class Test implements Runnable
{ @Override
public void run()
{
for (int i = 0; i < 100; i++)
{
System.out.println("这里表示一个操作。。。");
}
} public static void main(String[] args)
{
new Thread(new Test()).start();
} }
2),上面的代码显得有点繁琐,我在实际编码的时候就觉得有点恶心,现在我们使用匿名内部类来简写下上面的代码:
public class Test
{ public static void main(String[] args)
{
new Thread(new Runnable()
{ @Override
public void run()
{
for (int i = 0; i < 100; i++)
{
System.out.println("这里表示一个操作。。。");
}
}
}).start();
} }
3),现在使用起来也有点恶心,因为我只是想传递一个方法,在这里就是一个线程执行体到这个线程里面,但是java规定我不得不写一个匿名内部类,然后实现这个Runnable里面定义的run方法,因为java不允许传一段代码进方法的,现在我们使用lambda表达式来写上面的代码:
public class Test
{ public static void main(String[] args)
{
new Thread(() ->
{
for (int i = 0; i < 100; i++)
{
System.out.println("这里表示一个操作。。。");
}
}).start();
} }
4),如果说我们没有那个循环的话,我们上面的代码将更加的简单:
public static void main(String[] args)
{
new Thread(() -> System.out.println("这里表示一个操作。。。")).start();
}
OK,现在我们已经能明确的体会到lambda表达式在编码上带来的简洁性了。不说别的,单纯的就这点来说我们就应该开始使用lambda表达式了,其他还有好多的好处,下面我做一个整理:
1,一个lambda表达式是一个带参数的代码块
2,当你想要代码块在以后的某个时间点执行,就可以使用lambda表达式
3,lambda表达式可以被转换为函数式接口
4,lambda表达式可以在闭包作用域中有效的访问final变量
5,方法和构造器引用可以引用构造器和方法,但无效调用他们,我们使用这种新的语法编码更加的简单。
函数式编程--为什么会出现lambda表达式?的更多相关文章
- Java中的函数式编程(三)lambda表达式
写在前面 lambda表达式是一个匿名函数.在Java 8中,它和函数式接口一起,共同构建了函数式编程的框架. lambda表达式乍看像是匿名内部类的一种语法糖,但实际上,它们是两种本质不同的事物 ...
- Java-函数式编程(二)Lambda表达式
本文首发:Java-函数式编程(二)Lambda表达式 “Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lamb ...
- Java8 新特性----函数式接口,以及和Lambda表达式的关系
这里来讲解一下Java8 新特性中的函数式接口, 以及和Lambda 表达式的关系.看到过很多不少介绍Java8特性的文章,都会介绍到函数式接口和lambda表达式,但是都是分别介绍,没有将两者的关系 ...
- Java 中的函数式编程(Functional Programming):Lambda 初识
Java 8 发布带来的一个主要特性就是对函数式编程的支持. 而 Lambda 表达式就是一个新的并且很重要的一个概念. 它提供了一个简单并且很简洁的编码方式. 首先从几个简单的 Lambda 表达式 ...
- Java编程的逻辑 (91) - Lambda表达式
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...
- python函数式编程——匿名函数(lambda)
匿名函数lambda lambda x:x*x x就是参数 相当于函数 def f(x): return x*x 匿名函数可以作为函数对象赋值给变量: >>> f = lambda ...
- Java8函数式编程以及Lambda表达式
第一章 认识Java8以及函数式编程 尽管距离Java8发布已经过去7.8年的时间,但时至今日仍然有许多公司.项目停留在Java7甚至更早的版本.即使已经开始使用Java8的项目,大多数程序员也仍然采 ...
- 函数式编程 -> Lambda
一.函数式编程 函数式编程,同面向对象编程.指令式编程一样,是一种软件编程范式,在多种编程语言中都有应用.百科词条中有很学术化的解释,但理解起来并不容易.不过,我们可以借助于数学中函数的概念,来理解函 ...
- Java 关于函数式接口与Lambda表达式之间的关系
java是一种面向对象的语言,java中的一切都是对象,即数组,每个类创建的实例也是对象.在java中定义的函数或方法不可能完全独立,也不能将方法函数作为参数或返回值给实例. 在java7及以前,我们 ...
随机推荐
- mac安装mysql的两种方法(含配置)
1.使用安装包安装mysql 双击打开安装文件 双击pkg文件安装 一路向下,记得保存最后弹出框中的密码(它是你mysql root账号的密码) 正常情况下,安装成功. 此时只是安装成功,但还需要额外 ...
- linux sshd服务
1.ssh介绍:SSH是secure shell protocol的简写,由IETF网络工作小组制定,在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后再进行传输,确保传递的数据 ...
- linux 安装redis4.0.6
1.进入/usr/local/src目录,下载redis # cd /usr/local/src# wget http://download.redis.io/releases/redis-4.0.6 ...
- Linux下SVN提交时强制写日志
Linux版本: 1.在svn的hooks目录下新建一个名为pre-commit的文件并为其添加执行权限(用vi pre-commit直接创建) 2.pre-commit文件的内容如下: #!/bin ...
- 错误:'dict' object is not callable
在晚上学习别人的代码,偶然爆出错误:'dict' object is not callable 找了半天没发现错误.后来还想上文已经有变量名为dict. 因此dict在下面程序中被认为是一个变量不是内 ...
- 【转载】从头编写 asp.net core 2.0 web api 基础框架 (4) EF配置
Github源码地址:https://github.com/solenovex/Building-asp.net-core-2-web-api-starter-template-from-scratc ...
- 【ASP.NET Core】在Win 10 的 Linux 子系统中安装 .NET Core
在上一篇文章中,老周扯了一下在 Windows 10 中开启 Linux 子系统,并且进行了一些简单的设置.本篇咱们就往上面安装 .net core . 老周假设你从来没有用过 Linux,所以,接着 ...
- ICP在pose-graph中的作用
从1维的角度进行解释: 1m P0 o-----------------------o P1 假如LOAM计算的两个车辆初始位姿P0.P1如上图所示,作为pose-graph的两个顶点.那么二 ...
- java基础,集合,Arraylist,源码解析(基础)
ArrayList 是什么,定义? 这是动态的数组,它提供了动态的增加和减少元素,实现了List接口(List实现Collection,所以也实现Collection接口)灵活的设置数组的大小等好处 ...
- JXLS 2.4.0系列教程(六)番外篇——导出图片(完结)
突然想起来有同学说过能不能导出图片,本来我是想说不懂的,后来我上官网查了查,还挺容易.我就简短的写一写怎么导出图片. 官方提供了导出图片标签: jx:image(lastCell="D10& ...