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. 如何用StatSVN统计SVN服务器某项目的代码量

    startsvn下载地址: https://sourceforge.net/projects/statsvn/?source=typ_redirect svn下载地址: https://www.vis ...

  2. 使用Fiddler监听java HttpURLConnection请求

    使用Fiddler监听java HttpURLConnection请求

  3. 一个标准sql语句模板

    select distinct top n * from t1 inner join t2 on ... join t3 on ... where ... group by ... having .. ...

  4. 206--Reverse A Singly Linked List

    package LinedList; public class ReverseASinglyLinkedList { //解法一:迭代. public ListNode reverseList(Lis ...

  5. provisional headers are shown 一例

    系统首页的ajax调用出现 报错: provisional headers are shown 最后查到的原因时,mysql数据库的磁盘满了,而首页的ajax调用要插入一条记录到数据库,卡住了.

  6. javascript 初探

    JS ,前端3剑客之一,控制HTML标签的动作.浏览器通过解释JS代码识别ta要做什么,因为在浏览器操作,所以最好使用谷歌浏览器. 参考: https://www.cnblogs.com/yuanch ...

  7. PTA 根据后序中序遍历输出先序遍历

    本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果. 输入格式: 第一行给出正整数N(≤30),是树中结点的个数.随后两行,每行给出N个整数,分别对应后序遍历和中序遍历结果, ...

  8. [NOI2009][codevs1846]KCOJ0191]植物大战僵尸

    题目描述 Description Plants vs. Zombies(PVZ)是最近十分风靡的一款小游戏.Plants(植物)和Zombies(僵尸)是游戏的主角,其中Plants防守,而Zombi ...

  9. [POJ1087]A Plug for UNIX

    题目描述 Description You are in charge of setting up the press room for the inaugural meeting of the Uni ...

  10. emacs第二天

    setq 和setq-default的区别 cursor-type是一个buffer local 变量 在每一份buffer中都有一份值 如果变量是buffer local 里面的变量 setq-de ...