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 ...
随机推荐
- android studio学习----添加项目依赖包补充---添加github上的开源项目为库
导入maven中的库 如果开源库作者有将代码放到Maven库中,我们可以在gradle配置中直接引入,类似如下: compile 'com.github.dmytrodanylyk.android-p ...
- java获取客户端请求IP地址(公网ip)
之前写了一个获取ip地址的方法,但是放网上一查显示此Ip地址是局域网ip地址,要是想获取请求端的真实公网ip地址怎么样了,看了一些别人的博客后发现,想要获取客户端的公网ip必须借助第三方. packa ...
- Solr缓存原理分析及配置优化
一.缓存原理 缓存,带来急速性能体验! Solr提供了一系列的内置缓存来优化查询性能.Solr的缓存原理主要涉及以下4个方面: 1.缓存大小及缓存置换法 从缓存大小的角度来看,不能将缓存设置的太大,否 ...
- 影响Python行为的环境变量
目录 影响Python行为的环境变量 环境变量 1. PYTHONHOME 2. PYTHONPATH 3. PYTHONSTARTUP 4. PYTHONOPTIMIZE 5. PYTHONBREA ...
- Linux 批量查找并替换文件夹下所有文件的内容
1.批量查找某个目下文件的包含的内容 cd etc grep -rn "查找的内容" ./ 2.批量替换某个目下所有包含的文件的内容 cd etc sed -i "s/查 ...
- java接口顺口溜
原创作品,转载请注明来源,这篇博客我也发到了我的csdnhttps://blog.csdn.net/suyues/article/details/103458086 接口 接口定义全局变量和抽象方法 ...
- VUE-X 的传值使用
1.导入vuex vuex是基于vue 的 import Vuex from 'vuex' Vue.use(Vuex); 导入 2.创建store 实例 let store = new Vuex. ...
- linux cpu信息查看
转自:https://www.cnblogs.com/emanlee/p/3587571.html # 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X ...
- IComparable<T>.CompareTo(T) 方法
IComparable<T>.CompareTo(T) 方法 定义 命名空间: System 程序集: System.Runtime.dll, mscorlib.dll, netstand ...
- Scrapy笔记04- Selector详解
Scrapy笔记04- Selector详解 在你爬取网页的时候,最普遍的事情就是在页面源码中提取需要的数据,我们有几个库可以帮你完成这个任务: BeautifulSoup是python中一个非常流行 ...