目录:
第一篇:初探 java8 第 01 篇( Lambda与Stream API初识 )
第二篇:深入 java8 第 02 篇( Lambda表达式基础语法 )
第三篇:深入 java8 第 03 篇( 函数式接口,常见的4个函数式接口 )
第四篇:深入 java8 第 04 篇( 方法引用与构造器引用 )
第五篇:深入 java8 第 05 篇( Stream API 的操作->创建及中间操作 )
第六篇:深入 java8 第 06 篇( Stream API 的操作->终止操作 )
第七篇:深入 java8 第 07 篇( Stream API 的操作->规约、收集 )
第八篇:深入 java8 第 08 篇( Stream API 的综合练习 )
第九篇:深入 java8 第 09 篇( Fork/Join 框架的使用及其优势 )
第十篇:深入 java8 第 10 篇( 时间新特新 -> DateTimeFormatter 解析与格式化 )
第十一篇:深入 java8 第 11 篇( 带时区的时间或日期)
第十二篇:深入 java8 第 12 篇(接口中的默认方法与静态方法 )
第十三篇:深入 java8 第 13 篇( 其他新特性 -> Optional 类/重复注解与类型注解 )
一、Lambda表达式
Lambda 表达式的基础语法:Java8中引入了一个新的操作符 “->” 该操作符称为箭头操作符或 Lambda 操作符 箭头操作符将 Lambda
表达式拆分成两部分:
左侧:Lambda 表达式的参数列表
右侧:Lambda 表达式中所需执行的功能, 即 Lambda 体
Lambda 表达式语法:
语法格式一:无参数,无返回值 () -> System.out.println(“Hello Lambda!”);
语法格式二:有一个参数,并且无返回值 (x) -> System.out.println(x)
语法格式三:若只有一个参数,小括号可以省略不写 x -> System.out.println(x)
语法格式四:有两个以上的参数,有返回值,并且 Lambda 体中有多条语句 Comparator com = (x, y) -> {
System.out.println(“函数式接口”); return Integer.compare(x, y); };
语法格式五:若 Lambda 体中只有一条语句, return 和 大括号都可以省略不写 Comparator com = (x, y)
-> Integer.compare(x, y);
语法格式六:Lambda 表达式的参数列表的数据类型可以省略不写,因为JVM编译器通过上下文推断出,数据类型,即“类型推断” (Integer x, Integer y) -> Integer.compare(x, y);
关于类型推断:
在 Lambda 表达式中的参数类型都是由编译器推断得出的。 Lambda 表达式中无需指定类型,程序依然可以编译,这是因为 javac 根据程序的上下文,在后台推断出了参数的类型。 Lambda 表达式的类型依赖于上下文环境,是由编译器推断出来的。这就是所谓的“类型推断”。
上联:左右遇一括号省 下联:左侧推断类型省 横批:能省则省
二、 Lambda 表达式需要“函数式接口”的支持 函数式接口:接口中只有一个抽象方法的接口,称为函数式接口。
可以使用注解 @FunctionalInterface 修饰 可以检查是否是函数式接口
2.1 第二阶段:熟悉 Lambda 表达式的基础语法
2.1.1 语法格式一:无参数,无返回值
@Test
public void test01() {
Runnable rb = () -> System.out.println("hello world");
rb.run();
}
2.1.2 语法格式二:有一个参数,并且无返回值
@Test
public void test02() {
Consumer cm = (e) -> System.out.println(e);
cm.accept("hello world");
}
2.1.3 语法格式三:若只有一个参数,小括号可以省略不写
@Test
public void test03() {
Consumer cm = e -> System.out.println(e);
cm.accept("hello world");
}
2.1.4 语法格式四:有两个以上的参数,有返回值,并且 Lambda 体中有多条语句
@SuppressWarnings("unused")
@Test
public void test04() {
Comparator cp = (x, y) -> {
// 模拟多条语句
System.out.println("hello world");
return Integer.compare(x, y);
};
}
2.1.5 语法格式五:若 Lambda 体中只有一条语句, return 和 大括号都可以省略不写
@SuppressWarnings("unused")
@Test
public void test05() {
Comparator cp = (x, y) -> Integer.compare(x, y);
}
2.1.6 语法格式六:Lambda 表达式的参数列表的数据类型可以省略不写,因为JVM编译器通过上下文推断出,数据类型,即“类型推断” 如语法五所示
2.1.7 需求:实现对整数进行运算,需要先定义一个函数式接口 Funcation
2.1.7.1 需求一:实现对一个整数进行加法运算
public Integer operations01(Integer num, Funcation01 fun) {
return fun.getValues(num);
}
@Test
public void test06() {
Integer result = operations01(100, (x) -> x + x);
System.out.println(result);
}
2.1.7.2 需求二:实现对两个整数进行加法运算
public Integer operations02(Integer num01,Integer num02,Funcation02 fun){
return fun.getValues(num01, num02);
}
@Test
public void test07(){
System.out.println(operations02(100, 200, (x,y)-> x+y ));
}
源码下载地址:https://download.csdn.net/download/hello_world_qwp/10401249