函数式编程--为什么会出现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及以前,我们 ...
随机推荐
- 【Tarjan缩点】PO3352 Road Construction
Road Construction Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 12532 Accepted: 630 ...
- VS2017编译SFML SDK配制环境详解
SFML和Visual Studio 介绍 如果您在Visual Studio IDE(Visual C ++编译器)中使用SFML,本教程是第一个应该阅读的教程.它将解释如何配置您的SFML项目. ...
- 表迁移工具的选型-xtrabackup的使用
1.1. 场景 有的时候test人员可能需要在测试库上比较新的数据,这时候只能是从生产库上面去那了.如果是小表还好实用mysqldump/mysqlpump就可以轻松的解决.但是,如果遇到了大表这将是 ...
- POI读取excel工具类(xls,xlsx通用)
package com.boot.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileNotF ...
- vue单页面打包文件大?首次加载慢?按需加载?是你打开方式不对
部署各vue项目,走了一遍坑.... vue单页面应用刷新404 找到nginx多网站配置文件:类似nginx/sites-available/www.baidu.com server { liste ...
- DAY3-“忙里偷闲”找你玩耍2018-1-11
接触Java第三天,嘿嘿,今天近代史期末考试,提前一小时交卷,回宿舍继续学习,中午去见女神姐姐了,每次见完女神姐姐都是满满地动力.这次女神姐姐告诉我们要好好规划自己的时间,早上花20分钟规划好一天的时 ...
- ConstraintLayout知识记录
一.准备工作 1. 确保SDK Tools已经下载了ContraintLayout的支持库. 2. gradle中增加对ConstraintLayout的依赖. compile 'com.andr ...
- JSP最常用的五种内置对象(out,request,response,session,application)
为了简化开发过程,JSP提供了一些内置对象,它们由容器实现和管理.开发者在JSP页面中无需声明,无需实例化就可使用.主要有out,request,response,session,applicatio ...
- Kruscal(最小生成树)算法模版
;//最大点数 ;//最大边数 int n,m;//n表示点数,m表示边数 struct edge{int u,v,w;} e[maxm];//u,v,w分别表示该边的两个顶点和权值 bool cmp ...
- dijk
.....................用矩阵存..................... 1 int mp[N][N]; bool p[N]; int dist[N]; void dijk(int ...