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. Java学习笔记8(面向对象一:概念、private)

    面向过程的思想:遇到问题,想,我该怎么解决这个问题?然后一步一步解决 面向对象的思想:遇到一件事的时候,思考,我该让谁来做,至于他怎样去做,不是我需要考虑的事情,只要最后做好就行 实际举例:我们要组装 ...

  2. 【树链剖分】洛谷P3379 树链剖分求LCA

    题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询问的个数和树根结点的序号. 接下来N-1行每 ...

  3. CSS 设置table下tbody滚动条

    table tbody { display:block; height:195px; overflow-y:scroll; } table thead, tbody tr { display:tabl ...

  4. Yii2.0源码阅读-从路由到控制器

    之前的文章弄清了一次请求的开始到结束.主要讲了Yii Applicaton实例的创建.初始化,UrlManager如何返回Yii中的路由信息,到runAction,最后将Response发送给客户端. ...

  5. Codeforces 768A Oath of the Night's Watch

    A. Oath of the Night's Watch time limit per test:2 seconds memory limit per test:256 megabytes input ...

  6. 【Java学习笔记之十七】Java中普通代码块,构造代码块,静态代码块区别及代码示例分析

    //执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 其中静态代码块只执行一次.构造代码块在每次创建对象是都会执行. 1 普通代码块 //普通代码块:在 ...

  7. [51nod1743]雪之国度

    雪之国度有N座城市,依次编号为1到N,又有M条道路连接了其中的城市,每一条道路都连接了不同的2个城市,任何两座不同的城市之间可能不止一条道路. 雪之女王赋予了每一座城市不同的能量,其中第i座城市被赋予 ...

  8. node学习笔记2 —— npm包管理

    全局模式安装包 将包安装为全局可用的可执行命令, 并非可以从任意地方require 将 package.json中bin定义的文件软链到统一的目录下, 该目录可以通过如下方式推算出来: path.re ...

  9. HTTP协议简介

    一.简介 HTTP(HyperText Transfer Protocol, 超文本传输协议) 是访问互联网使用的核心通信协议,也是所有web应用程序使用的通信协议.消息模型:客户端发送请求消息,服务 ...

  10. 阿里云邮箱POP3、SMTP设置教程

    3G免费网www.3gmfw.cn免费为你分享阿里云邮箱POP3.SMTP设置教程,阿里云邮箱 阿里云邮箱POP3设置 阿里云邮箱SMTP设置的相关资源如下: 什么是POP3.SMTP? 阿里云邮箱已 ...