• Java8_表达式语法


    语法

    Lambda 表达式在Java 语言中引入了一个新的语法元 素和操作符。这个操作符为 “->” , 该操作符被称 为 Lambda 操作符或剪头操作符。它将 Lambda 分为 两个部分:

    左侧:指定了 Lambda 表达式需要的所有参数
    右侧:指定了 Lambda 体,即 Lambda 表达式要执行 的功能。

    语法格式

    语法格式一:无参,无返回值,Lambda体只需一条语句

    旧写法:
     Runnable runnable = new Runnable() {
                int num = 0; //jdk 1.7 前,必须是 final
    
                @Override
                public void run() {
                    System.out.println("Hello world " + num);
                }
            };
    runnable.run();
    
    lamda表达式:
    Runnabler1=()->System.out.println("Hel1o Lambda!");
    

    语法格式二:Lambda需要一个参数

    Consumer<String>fun=(args)->System.out.println(args);
    

    语法格式三:Lambda只需要一个参数时,参数的小括号可以省略

    Consumer<String>fun=args->System.out.printin(args);
    

    语法格式四:Lambda需要两个参数,并且有返回值

    BinaryOperator<Long>bo=(x,y)->{
    System.out.print1n("实现函数接口方法!");
    return x+y;
    };
    

    语法格式五:当Lambda体只有一条语句时,return与大括号可以省略

    BinaryOperator<Long>bo=(x,y)->x+y;
    

    语法格式六:数据类型可以省略,因为可由编称为“类型推断”

    BinaryOperator<Long>bo=(Longlx,|Longly)->{
    System.out.print1n("实现函敷接口方法!);
    returnx+y;
    }
    

    类型推断

    上述 Lambda 表达式中的参数类型都是由编译器推断 得出的。Lambda 表达式中无需指定类型,程序依然可 以编译,这是因为 javac 根据程序的上下文,在后台 推断出了参数的类型。Lambda 表达式的类型依赖于上 下文环境,是由编译器推断出来的。这就是所谓的 “类型推断”

    Predicate<Integer> atLeast5 = x -> x > 5;
    

    依据Predicate自动推断x的类型为Integer,并且表达式的返回值为boolean

    ** 反例 **

    BinaryOperator add = (x, y) -> x + y;
    

    编译报错,因为无法推断xy的类型,则认定xy类型为Object,而Object类型不支持+操作符

  • 相关阅读:
    javascript中map的用法
    洛谷P1057传球游戏-题解
    洛谷P1049装箱问题-题解
    洛谷P1048采药-题解
    洛谷P1044栈-题解
    洛谷P1040加分二叉树-题解
    洛谷P1005矩阵取数游戏-题解
    洛谷P1004方格取数-题解
    洛谷P1002过河卒-题解
    搜索
  • 原文地址:https://www.cnblogs.com/junzifeng/p/12743033.html
Copyright © 2020-2023  润新知