Lambda 表达式实例
public class Java8Tester {
/**
*
语法
lambda 表达式的语法格式如下:
以下是lambda表达式的重要特征:
- 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
- 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
- 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
- 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值
*/
public static void main(String args[]) {
Java8Tester tester = new Java8Tester(); // 类型声明
MathOperation addition = (int a, int b) -> a + b; // 不用类型声明
MathOperation subtraction = (a, b) -> a - b; // 大括号中的返回语句
MathOperation multiplication = (int a, int b) -> {
return a * b;
}; // 没有大括号及返回语句
MathOperation division = (int a, int b) -> a / b; System.out.println("10 + 5 = " + tester.operate(10, 5, addition));
System.out.println("10 - 5 = " + tester.operate(10, 5, subtraction));
System.out.println("10 x 5 = " + tester.operate(10, 5, multiplication));
System.out.println("10 / 5 = " + tester.operate(10, 5, division)); // 不用括号
GreetingService greetService1 = message -> System.out.println("Hello " + message); // 用括号
GreetingService greetService2 = (message) -> System.out.println("Hello " + message); greetService1.sayMessage("Runoob");
greetService2.sayMessage("Google");
}
/**
lambda 表达式只能引用标记了 final 的外层局部变量,这就是说不能在 lambda 内部修改定义在域外的局部变量,否则会编译错误
* 变量作用域
*/
尽管salutation未明显定义final语义,但其实隐性具有了final的语义,所以此时再去修改salutation值,会编译不通过
@Test
public void paramDomain() {
GreetingService greetService1 = message -> System.out.println(salutation + message);
greetService1.sayMessage(" World");
}
private int operate(int a, int b, MathOperation mathOperation) { return mathOperation.operation(a, b); } interface MathOperation { int operation(int a, int b); } interface GreetingService { void sayMessage(String message); } }
output:
10 + 5 = 15
10 - 5 = 5
10 x 5 = 50
10 / 5 = 2
Hello Runoob
Hello Google
/**
*Java 8中允许接口实现方法, 而不是简单的声明, 这些方法叫做默认方法,使用特殊的关键字default
。
因为默认方法不是抽象方法,所以不影响我们判断一个接口是否是函数式接口
*/
p.p1 { margin: 0; font: 11px Monaco }
p.p2 { margin: 0; font: 11px Monaco; min-height: 15px }
span.s1 { color: rgba(147, 26, 104, 1) }
span.s2 { color: rgba(126, 80, 79, 1) }
span.s3 { color: rgba(3, 38, 204, 1) }
span.s4 { color: rgba(57, 51, 255, 1) }
span.Apple-tab-span { white-space: pre }
interface GreetingService {
void sayMessage(String message);
default void say(String message) {
System.out.println("hi,"+message);
}
}
p.p1 { margin: 0; font: 11px Monaco; color: rgba(119, 119, 119, 1) }
p.p2 { margin: 0; font: 11px Monaco }
p.p3 { margin: 0; font: 11px Monaco; min-height: 15px }
p.p4 { margin: 0; font: 11px Monaco; color: rgba(126, 80, 79, 1) }
span.s1 { color: rgba(147, 26, 104, 1) }
span.s2 { color: rgba(126, 80, 79, 1) }
span.s3 { text-decoration: underline }
span.s4 { color: rgba(57, 51, 255, 1) }
span.s5 { color: rgba(0, 0, 0, 1) }
span.Apple-tab-span { white-space: pre }
@Test
public void paramDomain1() {
GreetingService greetService1 = (p) -> {};
greetService1.sayMessage("d");
greetService1.say(" jay");
}
output:
p.p1 { margin: 0; font: 11px Monaco }
hi, jay
p.p1 { margin: 0; font: 11px Monaco }
p.p2 { margin: 0; font: 11px Monaco; min-height: 15px }
p.p3 { margin: 0; font: 11px Monaco; color: rgba(79, 118, 203, 1) }
p.p4 { margin: 0; font: 11px Monaco; color: rgba(119, 119, 119, 1) }
span.s1 { color: rgba(147, 26, 104, 1) }
span.s2 { color: rgba(3, 38, 204, 1) }
span.s3 { color: rgba(57, 51, 255, 1) }
span.s4 { color: rgba(0, 0, 0, 1) }
span.s5 { color: rgba(126, 80, 79, 1) }
span.Apple-tab-span { white-space: pre }
最新文章
- 关于JQuery简单介绍
- javascript介绍
- Win7下安装一个装逼文本编辑器Atom + activate-power-mode插件
- 【菜鸟玩Linux开发】在C++里操作MySQL
- 【WEB】初探Spring MVC框架
- Python学习笔记10
- linux 双网卡实现
- 读《程序员的SQL金典》[2]--函数
- LoadRunner 录制IE 8卡死
- Android UI ActionBar功能-Action Bar 左上角的向上或返回按钮
- VS解决BEX错误但不能关闭DEP保存
- Intellij idea破解办法
- 激活第一个CPU
- 2018-2019-2 20165232《网络对抗技术》Exp1 缓冲区溢出实验
- xml是什么
- CC攻击原理及防范方法和如何防范CC攻击
- python实现合并两个文件并打印输出
- OpenCV入门笔记(七) 文字区域的提取
- Spring IOC 源码之ResourceLoader
- python基础学习14----正则表达式
热门文章
- 20191017_datatable.select() 数据源中没有dataRow
- 第15.31节 PyQt(Python+Qt)入门学习:containers容器类部件GroupBox分组框简介
- Python中使用“模块名.__all__”查看模块建议导出的属性
- PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的StandardButtons标准按钮
- RSA简单实践
- Nmap学习使用指南
- Day2 【Scrum 冲刺博客】
- 【题解】GRE Words(UVA1502)
- SnowFlakeldWorker
- 七牛云上传视频(后端获取tolen)