Java8笔记第二篇(Lambda表达式基础语法)

目录:
第一篇:初探 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

你可能感兴趣的:(Java,JDK-1.8,新特性)