java8新特性了lambda表达式的写法

lambda我见到的写法目前基本都是针对接口的匿名实现类,在下面分享一下关于lambda的六种写法一、Lambda表达式的基本语法。

1.格式: lambda形参列表 -> lambda体
2.说明: -> : lambda操作符 或箭头操作符
->左边 :lambda表达式的形参列表
->右边:lambda表达式的执行语句,称为lambda体
3.如何使用:分为六种情况

第一种,无形参,无返回值

//不适用lambda
Runnable r = new Runnable() {
            @Override
            public void run() {
                System.out.println("昨天是七夕情人节!");
            }
        };
//使用lambda
Runnable r1 = () -> {
            System.out.println("你们有没有因为爱情而鼓掌呢?");
        };

 

第二种 lambda形参列表有一个参数,无返回值

 //不使用lambda
Consumer<String> con = new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        };
 //使用lambda
  Consumer<String> con1 = (String s) -> {
            System.out.println(s);
        };

 

第三种 针对于情况二进行迭代。lambda形参列表的变量的数据类型可以省略

//说明:java编译器可以根据上下文推断出变量的数据类型,故可以省略:类型推断
Consumer<String> con1 = (s) -> {
            System.out.println(s);
        };

 

第四种 针对于情况三进行迭代。如果lambda表达式的形参列表只有一个变量,则可以省略一对()

 Consumer<String> con1 = s -> {
            System.out.println(s);
        };

 

第五种 lambda表达式的形参列表有两个或两个以上的变量,lambda体有多条执行语句,甚至有返回值

//不使用lambda
Comparator<Integer> com1 = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                System.out.println(o1);
                System.out.println(o2);
                return o1.compareTo(o2);
            }
        };
//使用lambda
        Comparator<Integer> com2 = (o1,o2) -> {
            System.out.println(o1);
            System.out.println(o2);
            return o1.compareTo(o2);
        };

 

第六种  lambda体如果只有一条执行语句,可以省略这一对{}. 特别的,如果此唯一的一条执行语句是return,则除了省略一对{}之外,return关键字也可以省略

 Comparator<Integer> com1 = (o1,o2) -> o1.compareTo(o2);

总结:
1)lambda形参列表:如果有形参的话,都可以省略变量的数据类型 ---类型推断
如果形参列表只有一个形参,还可以省略一对()
2)lambda体:正常情况下,需要使用一对{}包起来所有的执行语句。
特别的,①lambda体如果只有一条执行语句,可以省略这一对{}.
②如果此唯一的一条执行语句是return,则除了省略一对{}之外,return关键字也可以省略
二、函数式接口
1.特点:如果一个接口中只有唯一的一个抽象方法,则此接口称为函数式接口
2.可以在接口的声明上使用@FunctionalInterface注解去校验一个接口是否是函数式接口
3.lambda表达式的使用依赖于函数式接口
4.lambda表达式即为函数式接口的实例。
只要一个对象是函数式接口的实例,那么该对象就可以用Lambda表达式来表示。
所以以前用匿名类表示的现在都可以用Lambda表达式来写。

ps:!!!!取自尚硅谷 宋红康老师

posted @ 2020-10-28 20:12  L三木1121  阅读(480)  评论(0)    收藏  举报