我们首先需要先了解什么是函数式编程、函数式编程是一种结构化编程范式、类似于数学函数、它关注的重点在于数据操作、或者说它所提倡的思想是做什么,而不是如何去做。

自Jdk8中开始、它也支持函数式编程、函数式编程的关注重点在于参数列表、代码的执行逻辑、将函数以参数的形式进行传递、搭配Jdk8语法糖Lambda闭包能够使得代码更加简化和优雅。

lambda表达式

Lambda表达式是Jdk8推出的语法糖、"可推导即可省略"就是Lambda的核心思想、所谓的可推导即可省略指的是能够通过当前上下文推导出来的内容都可用进行省略、如一些格式化的代码、方法修饰符,数据类型等。

Lambda表达式的基本语法:() -> {}

():方法的参数列表,参数类型可省略,但如果指定一个参数类型后则其他所有参数类型都必须指定参数类型,如果参数列表参数有且只有一个的情况下,连()都能够进行省略。

{}:代码执行逻辑,也就是具体方法所需要执行的代码、当代码片段只有一行或仅有一行返回给调用环境(return)的时候也可以将{}进行省略。

->:Lambda表达式的格式化代码、无法省略、我们可以认为它是一个发送的标识、() ->{} 就是将左侧的参数列表"发送"到右侧代码片段中。

lambda基础语法

public class Main{

    public static void main(String[] args) {
// 我们单独开一条线程要做某些操作,但又不想单独对线程写个实现类,我们通常可以使用匿名内部类的方式
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(String.format("%s:%s","我是一个匿名内部类的线程",Thread.currentThread().getName()));
}
}).start();
// 以上的匿名内部类实现接口的方式非常常见,但实际上大部分都是没有意义的格式化代码,如果我们使用Lambda表达式进行简化
new Thread(()->{
System.out.println(String.format("%s:%s","我是一个lambda的简化的线程",Thread.currentThread().getName()));
}).start();
/**
* 我们发现通过lambda表达式后确实省略了很多代码:
* new Runnable() 被简化成了 ()
* @Override public void run() 被简化成了 {}
* 以上的代码为什么能被Lambda表达式简化呢?
* 因为Lambda只关注参数列表和执行逻辑(输入和输出),其余的格式化代码它并不关注,所以都是可以进行省略。
* 但需要注意的并不是所有的代码都能够使用Lambda表达式进行简化的,需要满足以下两个条件:
* 1.匿名内部类必须是一个接口
* 2.该接口有且只有一个需要实现的抽象方法
*/
new Thread(()-> System.out.println(String.format("%s:%s","我是一个lambda简化再简化的线程",Thread.currentThread().getName()))).start();
// 因为输出只有一行代码,所以连{}都可以省略。
/**
* 最终结果:
* 我是一个匿名内部类的线程:Thread-0
* 我是一个lambda的简化的线程:Thread-1
* 我是一个lambda简化再简化的线程:Thread-2
*/
}
}

最新文章

  1. MySQL 临时表
  2. redis 基本数据类型
  3. Jquery请求Ajax的json数据
  4. ICC的sacn-wise和unit-wise
  5. ASP开发入门+实战电子书共50本 —下载目录
  6. Linux_查看进程
  7. window bzr launchpad 安装配置
  8. 如何参与一个GitHub开源项目
  9. Android开发学习之Intent具体解释
  10. JS分两种数据类型,你都知道吗?
  11. JS框架设计读书笔记之-小知识
  12. JAVA中的设计模式一(单例模式)
  13. Ubuntu 16.04 LTS今日发布
  14. ubuntu12.04:Tomcat 7服务器:手动安装
  15. C++结束进程 并能显示其父进程
  16. JAVA课程设计——一个简单的教务人事管理系统
  17. 开发中遇到的css兼容问题
  18. NPOI导出Excel2007-xlsx
  19. orcal - 单行函数
  20. 洛谷 P1609 最小回文数 题解

热门文章

  1. sql server 跨IP库更新表字段(OPENDATASOURCE 、update)
  2. 如何等待ajax完成再执行相应操作
  3. 01. MySQL__数据库分类和介绍
  4. Hadoop中HDFS 的相关进程以及工作流程图(详细流程图)
  5. Linux下IPC之共享内存的使用方法
  6. 【做题笔记】CF Edu Round 132
  7. python在管道中执行命令
  8. 王霸雄图荣华敝屣,谈笑间尽归尘土|基于Python3双队列数据结构搭建股票/外汇交易匹配撮合系统
  9. jquery转换为同步请求
  10. 一文带你了解webrtc基本原理(动手实现1v1视频通话)