fengzf的gravatar头像
fengzf 2019-12-02 11:49:59
Java 8新特性——Lambda表达式

Lambda允许把函数作为一个方法的参数使用,由编译器推断并转换为常规的代码,实现同样的功能代码更简洁。

语法:

         (parameters) -> expression

         (parameters) -> { statements;}

重要特征:

         1、不需要声明参数类型,编译器可以统一识别参数值

         例如:()->5  不需要参数,返回值5

          (x,y) -> x - y  没有声明参数类型,返回x - y的差值

         2、当有一个参数时无需定义括号,当有两个参数时必须定义括号

         例如:x -> 2 * x   一个参数,不用定义括号

               (x,y) -> x - y  两个参数,必须有括号

         3、主体包含一个语句,就不需要大括号

         4、如果主体只有一个表达式返回值则编译器会自动返回值

public class Java8LambdaDemo {

     public static void main(String args[]) {
         Java8LambdaDemo java8LambdaDemo = new Java8LambdaDemo();
        //类型声明
         Calculator addtion = (int a,int b) ->a+b;
         //不用类型声明
         Calculator subtraction = (a,b) -> a-b;
         //大括号的返回语句
         Calculator multiplication = (int a,int b) -> {return a*b; };
         //没有大括号的返回语句
         Calculator division = (int a,int b) -> a/b;

         System.out.println("100+50="+java8LambdaDemo.operate(100,50,addtion));
         System.out.println("100-50="+java8LambdaDemo.operate(100,50,subtraction));
         System.out.println("100*50="+java8LambdaDemo.operate(100,50,multiplication));
         System.out.println("100/50="+java8LambdaDemo.operate(100,50,division));
      }

    /**
     * 算数运算接口
     */
    interface  Calculator{
         int  calculate(int a,int b);
    }

    /**
     *操作方法
     */
    private int operate(int a,int b,Calculator calculator){
        return calculator.calculate(a,b);
    }
}

Java 8新特性——Lambda表达式Java 8新特性——Lambda表达式测试结果:

Java 8新特性——Lambda表达式作用域:可以在直接在Lambda表达式中访问外层的局部变量,但表达式内层不能修改定义在表达式外的局部变量,否则会有编译错误。lambda表达式内的局部变量不允许与外部变量重名。

public class Java8LambdaScopeDemo {
     public static void main(String args[]) {
         final String salutation = "hello ";
         String myName = "I am Lambda ~";
         String today = "2019/12/02";
         SayHello greetingService = message -> {
             System.out.println(salutation + message + myName);
             //此处修改today出现变异错误
             //today = "2019/12/03";
             //此处定义的局部变量会出现编译错误
             //String myName = "Java";
         };

         greetingService.say("World ! ");
      }
     interface SayHello{
         /**
          * 打招呼方法
          * @param message
          */
         void say(String message);

     }
}

Java 8新特性——Lambda表达式Java 8新特性——Lambda表达式

 


打赏
最近浏览
zjw1997 2022年4月30日
暂无贡献等级
sdtzwss  LV12 2020年9月25日
gengwenbin 2020年9月3日
暂无贡献等级
bcli123  LV7 2020年8月26日
yzcan  LV6 2020年7月31日
wangzhiming  LV2 2020年7月8日
随便取个名字_哈哈  LV26 2020年6月7日
maomao852  LV12 2020年5月28日
haoayou  LV8 2020年5月27日
wangshaoqiu  LV4 2020年5月20日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友