zoukankan      html  css  js  c++  java
  • Java8新特性之Lambda表达式

    1、Lambda 的基本介绍

    Lambda Java8 的新特性之一,Lambda 是一个匿名函数,我们可以把 Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。 

    在JDK8之前,Java是不支持函数式编程的,所谓的函数编程,即可理解是将一个函数(也称为“行为”)作为一个参数进行传递。通常我们提及得更多的是面向对象编程,面向对象编程是对数据的抽象(各种各样的POJO类),而函数式编程则是对行为的抽象(将行为作为一个参数进行传递)。在JavaScript中这是很常见的一个语法特性,但在Java中将一个函数作为参数传递这却行不通,好在JDK8的出现打破了Java的这一限制。 

    2、Lambda 的语法

    Lambda 表达式在Java 语言中引入了一个新的操作符。这个操作符为 “->” , 该操作符被称为 Lambda 操作符或剪头操作符。

    Lambda 操作符 -> 将 Lambda 分为了两个部分:

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

    各种情况语法格式说明:

    • 无入参,无返回值:
    Runnable r1 = () -> System.out.println("Hello Lambda!");
    • 有一个入参,无返回值:
    Consumer<String> con = (x) -> System.out.println(x);
    Consumer<String> con = x -> System.out.println(x);  //只有一个参数,此时参数的小括号可以省略掉
    • 有两个入参,并且有返回值
    Comparator<Integer> com = (x, y) -> {
        System.out.println("函数式接口");
        return Integer.compare(x, y);
    };

    当 Lambda 体只有一条语句时,return 与大括号都可以省略,Lambda 会自动将操作符右侧的值进行返回

    Comparator<Integer> com = (x, y) -> Integer.compare(x, y);

    Lambda 表达式的参数列表的数据类型也可以省略不写,因为JVM编译器会通过上下文自动推断出数据类型,即“类型推断”

    Comparator<Integer> com = ( Integer x, Integer y) -> {  //Integer 类型可以省略
       System.out.println("函数式接口");
       return Integer.compare(x, y);
    };

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

  • 相关阅读:
    js——h5如何直接唤起百度地图app进行导航
    flutter学习之路-window下安装
    mongoDB- window下安装与启动
    js-轻松理解map, reduce, filter ,every, some
    js基础-构造函数
    js基础-node环境下说哈js异步,同步,单线程,微任务和宏任务
    js基础-作用域和作用域链以及闭包
    wamp安装
    php tp5 连接sqlserver配置
    php curl扩展
  • 原文地址:https://www.cnblogs.com/wenxuehai/p/15646854.html
Copyright © 2011-2022 走看看