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表达式来写。
                    
                
                
            
        
浙公网安备 33010602011771号