Java学习:Lambda表达式
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表达式的标准格式
由三部分组成:
- 一些参数
- 一个箭头
- 一段代码
格式:
- (参数列表)-> {一些重写方法的代码}:
解释说明格式:
- ():接口中抽象方法的参数列表,没有参数,就空着
- ->:传递的意思,把参数传递给方法体{}
- {}:重写接口的抽象方法的方法体
Lambda表达式:是可推导,可以省略
- 凡是根据上下文推导出来的内容,都可以省略书写
可以省略的内容:
- (参数列表):括号中的参数列表的数据类型,可以省略不写
- (参数列表):括号中的参数如果只有一个,那么类型和()都可以省略
- (一些代码):如果()中的代码只有一行,无论是否由返回值,都可以省略({},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的使用前提
- 使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法;
- 使用Lambda必须具有上下文推断。
备注:有且仅有一个抽象方法的接口,成为“函数式接口”。
Java学习:Lambda表达式的更多相关文章
- Java基础学习总结(44)——10个Java 8 Lambda表达式经典示例
Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Ja ...
- Java 8 Lambda表达式学习和理解
Java 8 Lambda表达式和理解 说明:部分资料来源于网络 时间:20190704 Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性.Lambda 允许把函数作为一 ...
- Java 8 Lambda表达式
Java 8 Lambda表达式探险 http://www.cnblogs.com/feichexia/archive/2012/11/15/Java8_LambdaExpression.html 为 ...
- 深入浅出 Java 8 Lambda 表达式
摘要:此篇文章主要介绍 Java8 Lambda 表达式产生的背景和用法,以及 Lambda 表达式与匿名类的不同等.本文系 OneAPM 工程师编译整理. Java 是一流的面向对象语言,除了部分简 ...
- Java 8 Lambda表达式10个示例【存】
PS:不能完全参考文章的代码,请参考这个文件http://files.cnblogs.com/files/AIThink/Test01.zip 在Java 8之前,如果想将行为传入函数,仅有的选择就是 ...
- 转载:深入浅出 Java 8 Lambda 表达式
原文地址:http://viralpatel.net/blogs/Lambda-expressions-java-tutorial/ OneAPM for Java 能够深入到所有 Java 应用内部 ...
- Java8 新特性学习 Lambda表达式 和 Stream 用法案例
Java8 新特性学习 Lambda表达式 和 Stream 用法案例 学习参考文章: https://www.cnblogs.com/coprince/p/8692972.html 1.使用lamb ...
- Java 8 Lambda 表达式
Lambda 是啥玩意 简单来说,Lambda 就是一个匿名的方法,就这样,没啥特别的.它采用一种非常简洁的方式来定义方法.当你想传递可复用的方法片段时,匿名方法非常有用.例如,将一个方法传递给另外一 ...
- Java 8 lambda表达式示例
例1.用lambda表达式实现Runnable 我开始使用Java 8时,首先做的就是使用lambda表达式替换匿名类,而实现Runnable接口是匿名类的最好示例.看一下Java 8之前的runna ...
- Java 8 Lambda 表达式详解
一.Java 8 Lambda 表达式了解 参考:Java 8 Lambda 表达式 | 菜鸟教程 1.1 介绍: Lambda 表达式,也可称为闭包,是推动 Java 8 发布的最重要新特性. La ...
随机推荐
- 如何用StatSVN统计SVN服务器某项目的代码量
startsvn下载地址: https://sourceforge.net/projects/statsvn/?source=typ_redirect svn下载地址: https://www.vis ...
- 使用Fiddler监听java HttpURLConnection请求
使用Fiddler监听java HttpURLConnection请求
- 一个标准sql语句模板
select distinct top n * from t1 inner join t2 on ... join t3 on ... where ... group by ... having .. ...
- 206--Reverse A Singly Linked List
package LinedList; public class ReverseASinglyLinkedList { //解法一:迭代. public ListNode reverseList(Lis ...
- provisional headers are shown 一例
系统首页的ajax调用出现 报错: provisional headers are shown 最后查到的原因时,mysql数据库的磁盘满了,而首页的ajax调用要插入一条记录到数据库,卡住了.
- javascript 初探
JS ,前端3剑客之一,控制HTML标签的动作.浏览器通过解释JS代码识别ta要做什么,因为在浏览器操作,所以最好使用谷歌浏览器. 参考: https://www.cnblogs.com/yuanch ...
- PTA 根据后序中序遍历输出先序遍历
本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果. 输入格式: 第一行给出正整数N(≤30),是树中结点的个数.随后两行,每行给出N个整数,分别对应后序遍历和中序遍历结果, ...
- [NOI2009][codevs1846]KCOJ0191]植物大战僵尸
题目描述 Description Plants vs. Zombies(PVZ)是最近十分风靡的一款小游戏.Plants(植物)和Zombies(僵尸)是游戏的主角,其中Plants防守,而Zombi ...
- [POJ1087]A Plug for UNIX
题目描述 Description You are in charge of setting up the press room for the inaugural meeting of the Uni ...
- emacs第二天
setq 和setq-default的区别 cursor-type是一个buffer local 变量 在每一份buffer中都有一份值 如果变量是buffer local 里面的变量 setq-de ...