最代码广告位
fengzf的gravatar头像
fengzf2019-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表达式

 


打赏
最近浏览
yzcan LV67月31日
月亮星星星星
wangzhiming LV27月8日
星星星星
maomao852 LV125月28日
月亮月亮月亮
haoayou LV55月27日
月亮星星
wangshaoqiu LV45月20日
月亮
qaz72252774月22日
暂无贡献等级
wxwpxh LV63月7日
月亮星星星星
liweiwgm2月28日
暂无贡献等级
zhos0212 LV182月25日
太阳星星星星
顶部客服微信二维码底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友