Lambda表达式

函数式编程思想概述
---强调做什么,而不是以什么形式做

面向对象的思想:

  • 做一件事情,找一个能解决这个的事情的对象,调用对象的方法,完成事情

函数式编程思想

  • 只要能获取到结果,谁去做的,这么做的都不重要,重视的是结果,不重视过程

传统写法和Lambda写法对比

传统写法

public class CaiNiao{
public static void main(String[] args){
//匿名内部类,实现多线程
//Runnable task = new Runnable()
Runnable task = new Runnable(){
@Override
public void run(){//覆盖重写抽象方法
System.out.println(Thread.currentThread().getName()+"新线程创建了");
System.out.println("多线程任务执行!"); }
};
new Thread(task).start();//开启线程 } }

匿名内部类的好处与弊端

  • 一方面,匿名内部类可以帮助我们省去实现类的定义;
  • 另一方面,匿名内部类的语法确实太复杂了
public class CaiNiao{
public static void main(String[] args){
//匿名内部类,实现多线程
//Runnable task = new Runnable()
new Thread(new Runnable(){
@Override
public void run(){//覆盖重写抽象方法
System.out.println(Thread.currentThread().getName()+"新线程创建了");
System.out.println("多线程任务执行!");
}
}).start();//开启线程 } }

Lambda写法

()->{}

public class CaiNiao{
public static void main(String[] args){
//匿名内部类,实现多线程
//Runnable task = new Runnable()
new Thread(()->{//覆盖重写抽象方法
System.out.println(Thread.currentThread().getName()+"新线程创建了");
System.out.println("多线程任务执行!");
}
).start();//开启线程 } }

Lambda表达式的标准格式

由三部分组成:

  1. 一些参数
  2. 一个箭头
  3. 一段代码

格式:

  • (参数列表)-> {一些重写方法的代码}:

解释说明格式:

  • ():接口中抽象方法的参数列表,没有参数,就空着
  • ->:传递的意思,把参数传递给方法体{}
  • {}:重写接口的抽象方法的方法体

Lambda表达式:是可推导,可以省略

  • 凡是根据上下文推导出来的内容,都可以省略书写

可以省略的内容

  1. (参数列表):括号中的参数列表的数据类型,可以省略不写
  2. (参数列表):括号中的参数如果只有一个,那么类型和()都可以省略
  3. (一些代码):如果()中的代码只有一行,无论是否由返回值,都可以省略({},return,分号)

注意:要省略{},return,分号必须一起省略

  • JDK1.7 版本之前,创建集合对象必须把前后的泛型都写上
  • JDK1.7 版本之后,=号后边的泛型可以省略,后边的泛型可以根据前边的泛型推导出来
    new Thread(()->{//覆盖重写抽象方法
System.out.println(Thread.currentThread().getName()+"新线程创建了");
}
).start();//开启线程 new Thread(()->System.out.println(Thread.currentThread().getName()+"新线程创建了")).start();//开启线程

Lambda的使用前提

  1. 使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法;
  2. 使用Lambda必须具有上下文推断。

备注:有且仅有一个抽象方法的接口,成为“函数式接口”。

Java学习:Lambda表达式的更多相关文章

  1. Java基础学习总结(44)——10个Java 8 Lambda表达式经典示例

    Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Ja ...

  2. Java 8 Lambda表达式学习和理解

    Java 8 Lambda表达式和理解 说明:部分资料来源于网络 时间:20190704 Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性.Lambda 允许把函数作为一 ...

  3. Java 8 Lambda表达式

    Java 8 Lambda表达式探险 http://www.cnblogs.com/feichexia/archive/2012/11/15/Java8_LambdaExpression.html 为 ...

  4. 深入浅出 Java 8 Lambda 表达式

    摘要:此篇文章主要介绍 Java8 Lambda 表达式产生的背景和用法,以及 Lambda 表达式与匿名类的不同等.本文系 OneAPM 工程师编译整理. Java 是一流的面向对象语言,除了部分简 ...

  5. Java 8 Lambda表达式10个示例【存】

    PS:不能完全参考文章的代码,请参考这个文件http://files.cnblogs.com/files/AIThink/Test01.zip 在Java 8之前,如果想将行为传入函数,仅有的选择就是 ...

  6. 转载:深入浅出 Java 8 Lambda 表达式

    原文地址:http://viralpatel.net/blogs/Lambda-expressions-java-tutorial/ OneAPM for Java 能够深入到所有 Java 应用内部 ...

  7. Java8 新特性学习 Lambda表达式 和 Stream 用法案例

    Java8 新特性学习 Lambda表达式 和 Stream 用法案例 学习参考文章: https://www.cnblogs.com/coprince/p/8692972.html 1.使用lamb ...

  8. Java 8 Lambda 表达式

    Lambda 是啥玩意 简单来说,Lambda 就是一个匿名的方法,就这样,没啥特别的.它采用一种非常简洁的方式来定义方法.当你想传递可复用的方法片段时,匿名方法非常有用.例如,将一个方法传递给另外一 ...

  9. Java 8 lambda表达式示例

    例1.用lambda表达式实现Runnable 我开始使用Java 8时,首先做的就是使用lambda表达式替换匿名类,而实现Runnable接口是匿名类的最好示例.看一下Java 8之前的runna ...

  10. Java 8 Lambda 表达式详解

    一.Java 8 Lambda 表达式了解 参考:Java 8 Lambda 表达式 | 菜鸟教程 1.1 介绍: Lambda 表达式,也可称为闭包,是推动 Java 8 发布的最重要新特性. La ...

随机推荐

  1. bat 获取管理员权限,判断系统位数,获取当前文件所在目录,regsvr32注册DLL、OCX

    1.获取管理员权限 @echo off if exist "%SystemRoot%\SysWOW64" path %path%;%windir%\SysNative;%Syste ...

  2. django环境搭建(基于anaconda环境)

    环境:win7,anaconda,python3.5 1.介绍 Django特点:具有完整的封装,开发者可以高效率的开发项目,Django将大部分的功能进行了封装,开发者只需要调用即可,如此,大大的缩 ...

  3. Django框架(五)-- 视图层:HttpRequest、HTTPResponse、JsonResponse、CBV和FBV、文件上传

    一.视图函数 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. ...

  4. Python从零开始——安装与运行

  5. 部署LNMP应用平台

    一.LNMP应用平台概述 1.概述:LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构.Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/ ...

  6. spring-data-redis 关于订阅客户端不断创建新线程的问题

    项目中使用了spring-data-redis 实现消息订阅功能,原来的配置是这样子: <redis:listener-container connection-factory="je ...

  7. 目标检测论文解读8——YOLO v3

    背景 要在YOLO v2上作出改进. 方法 (1)分类器改变.从softmax loss改变为logistic loss,作用是处理符合标签,softmax loss只能用来预测只有一种类别的目标,l ...

  8. 【转】Pandas学习笔记(六)合并 merge

    Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...

  9. Java多线程编程核心技术-第6章-单例模式与多线程-读书笔记

    第 6 章 单例模式与多线程 本章主要内容 如何使单例模式遇到多线程是安全的.正确的. 6.1 立即加载 / “饿汉模式” 什么是立即加载?立即加载就是使用类的时候已经将对象创建完毕,常见的实现办法就 ...

  10. Python 模块A

    模块的四种形式 自定义模块,例如自己定义的common.py就叫common模块 内置模块:python解释器自带的,不需要安装 第三方模块:需要自己安装,13万个库,无所不能,写库(弄得更简单) 包 ...