Lambda表达及简化

Lambda表达式

  1. Lambda表达式是]DK 8开始新增的一种语法形式;
  2. 作用: 用于简化名内部类的代码写法

格式:

被重写方法的形参列表) ->{
被重写方法的方法体代码。
}

注意 : Lambda表达式只能简化函数式接口的匿名内部类!!!

什么是函数式接口?

有且仅有一个抽象方法的接口。

注意:将来我们见到的大部分函数式接口,上面都可能会有@Functionallnterfate的注解,有该注解的接口就必定是函数式接口。

示例代码:

Swimming s = new Swimming() {

//            @Override

//            public void swim() {

//                System.out.println("学生快乐的游泳~~~");

//            }

//        };

//        s.swim();

        Swimming s = () -> {

            System.out.println("学生快乐的游泳~~~");

        };

        s.swim();

}

全部代码:

package Test0812;



public class LambdaTest {

    public static void main(String[] args) {

        //目标:认识Lambda表达式

//        Animal a = new Animal() {

//            @Override

//            public void run() {

//            }

//        };

//        a.run();



        // 注意: Lambda表达式并不是能简化全部匿名内部类的写法,只能简化函数式接口的匿名内部类

        //错误的代码!

//        Animal a = () -> {

//            System.out.println("狗跑的贼快~~");

//        };

//        a.run();



//        Swimming s = new Swimming() {

//            @Override

//            public void swim() {

//                System.out.println("学生快乐的游泳~~~");

//            }

//        };

//        s.swim();

        Swimming s = () -> {

            System.out.println("学生快乐的游泳~~~");

        };

        s.swim();

    }

}

interface Swimming{ //函数式接口里只能有一个抽象方法

    void swim();

}

abstract class Animal {

    public abstract void run();

}

Lambda进一步省略

Lambda表达式的省略写法(进一步简化Lambda表达式的写法)

参数类型可以省略不写

如果只有一个参数,参数类型可以省略,同时()世可以省略。

如果Lambda表达式中的方法体代码只有一行代,可以省略大括号不写,同时要省略分号!此时,如果这行代码是return语句,也必须去掉return不写。

源代码:

//Arrays.setAll(prices, new IntToDoubleFunction() {
    // @Override
    //public double applyAsDouble(int value) {
    //          value = 0 1 2
    //        return prices[value] * 0.8;
    //      }
    // });

第一步简化:(Lambda简化)

//Arrays.setAll(prices, (int value) ->{
    //        return prices[value]*0.8;
    //        });

第二步简化:(省略参数类型)

//Arrays.setAll(prices, (value) ->{
    //        return prices[value] * 0.8;
    //        });

第三步简化:(只有一个参数省略参数类型和括号,只有一行代)

  //Arrays.setAll(prices, value ->{
    //        return prices[value] * 0.8;
    //        });

第四步简化:(只有一行代码,省略大括号不写,同时要省略分号,这行代码是return语句,也必须去掉return不写。)

    //  Arrays.setAll(prices, value -> prices[value] * 0.8 );

你可能感兴趣的:(java,servlet,android)