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表达式?的更多相关文章

  1. Java中的函数式编程(三)lambda表达式

    写在前面 lambda表达式是一个匿名函数.在Java 8中,它和函数式接口一起,共同构建了函数式编程的框架.   lambda表达式乍看像是匿名内部类的一种语法糖,但实际上,它们是两种本质不同的事物 ...

  2. Java-函数式编程(二)Lambda表达式

    本文首发:Java-函数式编程(二)Lambda表达式 “Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lamb ...

  3. Java8 新特性----函数式接口,以及和Lambda表达式的关系

    这里来讲解一下Java8 新特性中的函数式接口, 以及和Lambda 表达式的关系.看到过很多不少介绍Java8特性的文章,都会介绍到函数式接口和lambda表达式,但是都是分别介绍,没有将两者的关系 ...

  4. Java 中的函数式编程(Functional Programming):Lambda 初识

    Java 8 发布带来的一个主要特性就是对函数式编程的支持. 而 Lambda 表达式就是一个新的并且很重要的一个概念. 它提供了一个简单并且很简洁的编码方式. 首先从几个简单的 Lambda 表达式 ...

  5. Java编程的逻辑 (91) - Lambda表达式

    ​本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...

  6. python函数式编程——匿名函数(lambda)

    匿名函数lambda lambda x:x*x x就是参数 相当于函数 def f(x): return x*x 匿名函数可以作为函数对象赋值给变量: >>> f = lambda ...

  7. Java8函数式编程以及Lambda表达式

    第一章 认识Java8以及函数式编程 尽管距离Java8发布已经过去7.8年的时间,但时至今日仍然有许多公司.项目停留在Java7甚至更早的版本.即使已经开始使用Java8的项目,大多数程序员也仍然采 ...

  8. 函数式编程 -> Lambda

    一.函数式编程 函数式编程,同面向对象编程.指令式编程一样,是一种软件编程范式,在多种编程语言中都有应用.百科词条中有很学术化的解释,但理解起来并不容易.不过,我们可以借助于数学中函数的概念,来理解函 ...

  9. Java 关于函数式接口与Lambda表达式之间的关系

    java是一种面向对象的语言,java中的一切都是对象,即数组,每个类创建的实例也是对象.在java中定义的函数或方法不可能完全独立,也不能将方法函数作为参数或返回值给实例. 在java7及以前,我们 ...

随机推荐

  1. win10安装Tensorflow

    win10安装Tensorflow 前提: 保证你的pip>=8.1版本 否则利用python -m pip install -U pip  进行升级,或下载pip源文件 确定你的显卡是否支持c ...

  2. Oracle 存储过程以及存储函数

    以下的一些例子是基于scott用户下的emp表的数据,一和二使用的均为in,out参数,最后一个综合练习使用了 in out参数 一.存储过程 1.创建无参的存储过程示例  ------ hello ...

  3. linux交换空间

    swap空间有两种形式:一是交换分区,二是交换文件.总之对它的读写都是磁盘操作. linux内存通过 virtual memory 虚拟内存来管理整个内存, 虚拟内存管理着物理内存,也管理着swap交 ...

  4. java基础,集合,Arraylist,源码解析(基础)

    ArrayList 是什么,定义? 这是动态的数组,它提供了动态的增加和减少元素,实现了List接口(List实现Collection,所以也实现Collection接口)灵活的设置数组的大小等好处 ...

  5. hdu_1017(水水水,坑格式)

    #include<cstdio> #include<cmath> using namespace std; int main() { int T; scanf("%d ...

  6. solr服务的搭建(以solr4.1实现)

    1.准备工作:一个干净的Tomcat,solr-4.10.3. 2.新建一个文件夹我这里命名为solr,将Tomcat和solr-4.10.3放进去.新建一个solrhome的文件夹,里面放的是sol ...

  7. [国嵌攻略][159][SPI子系统]

    SPI 子系统架构 1.SPI core核心:用于连接SPI客户驱动和SPI主控制器驱动,并且提供了对应的注册和注销的接口. 2.SPI controller driver主控制器驱动:用来驱动SPI ...

  8. Docker+Jenkins持续集成环境(4):使用etcd+confd实现容器服务注册与发现

    前面我们已经通过jenkins+docker搭建了基本的持续集成环境,实现了服务的自动构建和部署,但是,我们遇到一个问题,jenkins构建出来的镜像部署后,需要通过ip:port去访问,有什么更好的 ...

  9. 从零开始学习前端JAVASCRIPT — 2、JavaScript基础ES5

    1:ES5简介 ECMAScript 5.1 (或仅 ES5) 是ECMAScript(基于JavaScript的规范)标准的修正. 与HTML5规范进程本质类似,ES5通过对现有JavaScript ...

  10. 分布式文件系统FastDFS动态扩容

    当用户量越来越大,则集群中某个group总会到达其极限,这时就得扩展集群的容量了. FastDFS的扩容分为对group纵向扩容和横向扩容 纵向扩容 指在同一个group组中增加服务器,实现数据冗余, ...