Java中Lambda表达式基础及使用详解
概述
Lambda 是JDK 8 的重要新特性。它允许把函数作为一个方法的参数(函数作为参数传递进方法中),使用 Lambda 表达式可以使代码变的更加简洁紧凑,使Java代码更加优雅。
标准格式
- 三要素:形式参数 箭头 代码块
- 格式:(形式参数)->{代码块}
- 形式参数:如果多个参数用逗号隔开,无参留空
- ->:英文中划线和大于号组成
- 代码块:具体要做的事
使用前提
- 有一个接口
- 接口中有且仅有一个抽象方法
举例:
1、无参无返回
定义一个接口
public interface Eatable {
void eat();
}
接口实现类
public class EatableImpl implements Eatable{
@Override
public void eat() {
System.out.println("一天一苹果");
}
}
测试类
public class EatableDemo {
public static void main(String[] args) {
//主方法调用useEatable
Eatable e = new EatableImpl();
useEatable(e);
//匿名内部类
useEatable(new Eatable() {
@Override
public void eat() {
System.out.println("一天一苹果");
}
});
//lambda表达式
useEatable(() -> {
System.out.println("一天一苹果");
});
}
private static void useEatable(Eatable e){
e.eat();
}
}
2、有参无返回代码示例
public interface Eatable {
void eat(String name);
}
public class EatDemo {
public static void main(String[] args) {
useEat((String name) -> {
System.out.println(name);
System.out.println("输出的啥");
});
}
private static void useEat(Eatable e){
e.eat("苹果");
}
}
3、有参有返回
public interface Addable {
int add(int x,int y);
}
public class AddableDemo {
public static void main(String[] args) {
useAddable( (int x,int y ) -> {
return x+y;
});
}
private static void useAddable(Addable a){
int sum = a.add(5, 7);
System.out.println(sum);
}
}
省略模式
- 参数的类型可省略,多个参数时候不可只省略一个;
- 如果参数有且仅有一个可省略大括号和分号;
- 如果代码块的语句只有一条,可省略大括号和分号(有return时return也省略掉)
注意事项
- 必须要有接口,接口中有且仅有一个抽象方法
- 必须有上下文环境,才能推导出Lambda对应的接口:局部变量的赋值、调用方法的参数
Lambda表达式和匿名内部类的区别
所需类型不同:
- 匿名内部类:可以是接口,也可以是抽象类,还可以是具体类
- Lambda表达式:只能是接口
使用限制不同:
- 如果接口中有且仅有一个抽象类,两者都可以使用
- 接口中多于一个抽象类,只能使用匿名内部类
实现原理不同:
- 匿名内部类:编译之后,产生一个单独的.class字节码文件
- Lambda表达式:编译之后,没有单独的.class字节码文件,对应的字节码会在运行时动态的生成
Java中Lambda表达式基础及使用详解的更多相关文章
- Java中的equals和hashCode方法详解
Java中的equals和hashCode方法详解 转自 https://www.cnblogs.com/crazylqy/category/655181.html 参考:http://blog.c ...
- 转:Java中的equals和hashCode方法详解
转自:Java中的equals和hashCode方法详解 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要重写这 ...
- Java中堆内存和栈内存详解2
Java中堆内存和栈内存详解 Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个变量时,ja ...
- java中List的用法和实例详解
java中List的用法和实例详解 List的用法List包括List接口以及List接口的所有实现类.因为List接口实现了Collection接口,所以List接口拥有Collection接口提供 ...
- Java中lambda表达式详解
原文地址:http://blog.laofu.online/2018/04/20/java-lambda/ 为什么使用lambda 在java中我们很容易将一个变量赋值,比如int a =0;int ...
- Java中Lambda表达式的使用
简介(译者注:虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖",由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能.本人建议不要乱用,因 ...
- Java中Lambda表达式的使用(转)
https://www.cnblogs.com/franson-2016/p/5593080.html 简介(译者注:虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖" ...
- 快速掌握Java中Lambda表达式的用法
Lambda表达式的作用: Lambda表达式的作用就是简化代码开发,让代码看起来更加简介.它是用来简化匿名内部类的.但是并不是所有的匿名内部类都能用Lambda表达式简化,Lambda表达式是有使用 ...
- Java中Lambda表达式的简单使用
Lambda表达式是Java SE 8中一个重要的新特性.你可以把 Lambda表达式 理解为是一段可以传递的代码 (将代码像数据一样进行传递).可以写出更简洁.更灵活的代码.作为一种更紧凑的代码风格 ...
随机推荐
- 黑马c++基础的一个通讯录系统
前言: 代码写的挺简单的,更像是c语言的课设,然后没有持久化的东西,之前也写过一个类似的,不过我写的纯c语言大概有1700多行,把信息全用文件存起来了, 所以如果要写完整的话,最好还是用数据库或者文件 ...
- WPF特效:流光动画效果
今天有人问我想实现一个流光效果.我简单的录了一下他想实现效果的GIF. 实际效果如下:因为今天有事情,只是大概实现了一个效果.主要使用PointAnimationUsingKeyFrames动画效果来 ...
- c语言字符串占据字节数
# include <stdio.h> //字符串占据的字节数 /* 不能将一个字符串常量赋给一个字符变量 为什么不能将一个字符串常量赋给一个字符变量?可以从两个方面作出解释: 前面讲过, ...
- Jmeter之事务控制器
性能测试的结果统计时我们一定会关注TPS,TPS代表的是每秒事务数,每个事务对应的是我们的请求.虽然JMeter能够帮我们把每个请求统计成一个事务,但有时候我们希望把多个操作统计成一个事务,JMete ...
- Kubernetes部署-二进制方式
环境配置 一.系统环境 序号 用途 系统 Docker版本 IP地址 1 Master CentOS Linux release 7.6.1810 (Core) 19.03.4 192.168.0.1 ...
- Unittest方法 -- 测试固件(TestFixture)
前置和后置 1.setUp:在写测试用例的时候,每次操作其实都是基于打开浏览器输入对应网址这些操作,这个就是执行用例的前置条件.2.tearDown:执行完用例后,为了不影响下一次用例的执行,一般有个 ...
- 福昕foxit phantom pdf高级编辑器企业版10.1 pro安装破解教程
本文提供福昕foxit phantom pdf高级编辑器企业版10.1的安装教程.pj教程,可以使用全部功能,注意的是此方法对个人版无效. 没有必要再尝试别的文章,仅看这一篇即可!别的文章亲测是通过修 ...
- NPM 所有的指令已经问题 使用淘宝镜像 出现code EAI_AGAIN
windows怎么卸载cnpm? npm uninstall cnpm -g windows怎么检测cnpm是否安装成功 cnpm -v 我们直接将node的仓库地址换成淘宝仓库地址即可 单次使用 n ...
- post传参params与body的区别(@RequestParam和@RequestBody的区别)
1.axios post请求 Content-Type默认为 application/x-www-form-urlencoded,我们传递参数的时,params里面的参数(简单的对象,通过 &quo ...
- angular5采坑之旅
开始尝试angular5,在此记录下踩过的坑以备查询 1.按照element-angular的文档引入后报错 is not part of the compilation output.解决方法--在 ...