public class Java8Tester {
/**
*

语法


lambda 表达式的语法格式如下:


(parameters) -> expression 或 (parameters) ->{ statements; }

以下是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 }

最新文章

  1. 关于JQuery简单介绍
  2. javascript介绍
  3. Win7下安装一个装逼文本编辑器Atom + activate-power-mode插件
  4. 【菜鸟玩Linux开发】在C++里操作MySQL
  5. 【WEB】初探Spring MVC框架
  6. Python学习笔记10
  7. linux 双网卡实现
  8. 读《程序员的SQL金典》[2]--函数
  9. LoadRunner 录制IE 8卡死
  10. Android UI ActionBar功能-Action Bar 左上角的向上或返回按钮
  11. VS解决BEX错误但不能关闭DEP保存
  12. Intellij idea破解办法
  13. 激活第一个CPU
  14. 2018-2019-2 20165232《网络对抗技术》Exp1 缓冲区溢出实验
  15. xml是什么
  16. CC攻击原理及防范方法和如何防范CC攻击
  17. python实现合并两个文件并打印输出
  18. OpenCV入门笔记(七) 文字区域的提取
  19. Spring IOC 源码之ResourceLoader
  20. python基础学习14----正则表达式

热门文章

  1. 20191017_datatable.select() 数据源中没有dataRow
  2. 第15.31节 PyQt(Python+Qt)入门学习:containers容器类部件GroupBox分组框简介
  3. Python中使用“模块名.__all__”查看模块建议导出的属性
  4. PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的StandardButtons标准按钮
  5. RSA简单实践
  6. Nmap学习使用指南
  7. Day2 【Scrum 冲刺博客】
  8. 【题解】GRE Words(UVA1502)
  9. SnowFlakeldWorker
  10. 七牛云上传视频(后端获取tolen)