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

自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
*/
}
}

【java8新特性】01:函数式编程及Lambda入门的更多相关文章

  1. [译]java8新特性:函数式编程(functional programming)的优点

    Java8引入了函数式编程,他对java是一个极大的扩展.Java从此不在是一个单纯的面向对象语言,现在他同时混合了函数式编程.这是巨大的改变,需要我们调整面对对象的编程习惯,以适应这些变化. 但是为 ...

  2. Java8新特性:函数式编程

    1. 概述 函数式编程学习目的: 能够看懂公司里的代码 大数据量下处理集合效率更高 代码可读性高 消灭嵌套地狱 函数式编程思想: 面向对象思想需要关注用什么对象完成什么事情.而函数式编程思想就类似于我 ...

  3. 乐字节-Java8新特性之函数式接口

    上一篇小乐带大家学过 Java8新特性-Lambda表达式,那什么时候可以使用Lambda?通常Lambda表达式是用在函数式接口上使用的.从Java8开始引入了函数式接口,其说明比较简单:函数式接口 ...

  4. Java8新特性(一)之Lambda表达式

    .personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...

  5. java8新特性学习:stream与lambda

    Streams api 对 Stream 的使用就是实现一个 filter-map-reduce 过程,产生一个最终结果,或者导致一个副作用(side effect). 流的操作类型分为两种: Int ...

  6. JDK 8 新特性之函数式编程 → Stream API

    开心一刻 今天和朋友们去K歌,看着这群年轻人一个个唱的贼嗨,不禁感慨道:年轻真好啊! 想到自己年轻的时候,那也是拿着麦克风不放的人 现在的我没那激情了,只喜欢坐在角落里,默默的听着他们唱,就连旁边的妹 ...

  7. Java8新特性 1——利用流和Lambda表达式操作集合

    Java8中可以用简洁的代码来操作集合,比如List,Map,他们的实现ArrayList.以此来实现Java8的充分利用CPU的目标. 流和Lambda表达式都是Java8中的新特性.流可以实现对集 ...

  8. Java8新特性:Function接口和Lambda表达式参考

    Lambda基本:https://blog.csdn.net/wargon/article/details/80656575 https://www.cnblogs.com/hyyq/p/742566 ...

  9. Java8新特性(拉姆达表达式lambda)

    一.函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西).简单来说,函数式接口是只包含一个方法的接口.比如Java标准库中的java.lang.Runn ...

随机推荐

  1. 程序分析与优化 - 9 附录 XLA的缓冲区指派

    本章是系列文章的案例学习,不属于正篇,主要介绍了TensorFlow引入的XLA的优化算法.XLA也有很多局限性,XLA更多的是进行合并,但有时候如果参数特别多的场景下,也需要进行分割.XLA没有数据 ...

  2. (数据库提权——Redis)Redis未授权访问漏洞总结

    一.介绍 1.Redis数据库 Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key- ...

  3. 安装rlwrap

    一. 安装readlineyum install readline* -y 二. 安装rlwrap[root@dbserver ~]# tar -zxvf rlwrap-0.43.tar.gz[roo ...

  4. 001 Redis 配置

    Redis缓存 1.配置Redis //Redis 配置文件 @Configuration public class RedisConfiguration { @Bean public RedisTe ...

  5. shell查询prometheus数据

    #shell查询prometheus数据 shell使用curl调用HTTP API执行PromQL /api/v1/query查询某一时刻的数据 查询条件PromSQL复杂时, 传入接口/api/v ...

  6. python jinjia2 高级

    高层api class jinja2.Environment([options]) Enviroment:环境,是Jinjia2的核心组件,它包含重要的共享变量,如配置.过滤器.测试.全局变量.模板加 ...

  7. Mybatis的使用(2)

    1 :模糊查询 #{}占位符和¥{}的区别 #{}占位符:传参大部分用#{}传参,它的底层是PreparedStatement对象,是安全的数据库访问,它能够防止sql注入 1.1:如果parmete ...

  8. Odoo14 给模块/应用加小图标

    # apps中的图标是固定路劲: static/description/icon.png # 主页图标是通过你的主menuitem的web_icon来设置的: <menuitem id=&quo ...

  9. Apache 首次亚洲在线峰会: Workflow & 数据治理专场

    背景 大数据发展到今天已有 10 年时间,早已渗透到各个行业,数据需 求越来越多,这使得大数据 业务间的依赖关系也越来越复杂,另外也相信做数据的伙伴肯定对如何治理数据也是痛苦之至,再加上现今云原生时代 ...

  10. 我与Apache DolphinScheduler社区的故事

    我与DolphinScheduler社区的故事 Apache DolphinScheduler 是一个开源的分布式去中心化.易扩展的可视化DAG大数据调度系统. 于2017年在易观数科立项,2019年 ...