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

自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. NC14731 逆序对

    NC14731 逆序对 题目 题目描述 求所有长度为 \(n\) 的 \(01\) 串中满足如下条件的二元组个数: 设第 \(i\) 位和第 \(j\) 位分别位 \(a_i\) 和 \(a_j\) ...

  2. 10道不得不会的JavaEE面试题

    10道不得不会的 JavaEE 面试题 我是 JavaPub,专注于面试.副业,技术人的成长记录. 以下是 JavaEE 面试题,相信大家都会有种及眼熟又陌生的感觉.看过可能在短暂的面试后又马上忘记了 ...

  3. 爬虫(14) - Scrapy-Redis分布式爬虫(1) | 详解

    1.什么是Scrapy-Redis Scrapy-Redis是scrapy框架基于redis的分布式组件,是scrapy的扩展:分布式爬虫将多台主机组合起来,共同完成一个爬取任务,快速高效地提高爬取效 ...

  4. labview从入门到出家4--用事件结构实现运算功能

    使用事件结构可以快速定位响应界面的操作事件,如按下,拖动,双击的事件.基本上我们所要实现的所有功能,都可以通过条件结构+事件结构去实现,比如后面进阶篇将会讲到的状态机就是通过条件结构和事件结构组成的. ...

  5. 挑战30天写操作系统-day2-汇编语言学习与Makefile入门

    1.介绍文本编辑器 这里,我们直接采用自己windows电脑自带的文本编辑器即可以完成制作要求 2.继续开发 下面先是对昨天使用的helloos.nas文件内容进行详细解释 ; hello-os ; ...

  6. OpenCV视频防抖技术解析

    视频防抖有很多种技术,各有优劣,主流的目前分为三种:EIS电子防抖EIS电子防抖是通过软件算法实现防抖的.其技术运作原理是通过加速度传感器和陀螺仪模块侦测手机抖动的幅度,从而来动态调节整ISO.快门以 ...

  7. 业务可视化-让你的流程图"Run"起来(3.分支选择&跨语言分布式运行节点)

    前言 首先,感谢大家对上一篇文章[业务可视化-让你的流程图"Run"起来(2.问题与改进)]的支持. 分享一下近期我对这个项目的一些改进. 1. 增加了分支选择工程,可以根据节点的 ...

  8. 使用codeblocks创建新项目

    很多同学在学习C或C++版的数据结构的时候,自己写项目是一个不错的锻炼方法,而用codeblocks写项目的时候我们就会遇到很多问题了,比如说: 1.如何建立新项目. 2.如何建立头文件和主函数文件. ...

  9. Python 元类详解

    一.Type介绍 在Python中一切皆对象,类它也是对象,而元类其实就是用来创建类的对象(由于一切皆对象,所以元类其实也是一个对象). 先来看这几个例子: 例1: In [1]: type(12) ...

  10. git常见问题及解决方法

    简介 由于在git使用过程中会出现各种各样的问题,因此本文将常见的问题记录下来并提供相应的解决方案,方便后续查找. git pull问题: There is no tracking informati ...