zoukankan      html  css  js  c++  java
  • Java 8新增的Lambda表达式

    一. 表达式入门

    Lambda表达式支持将代码块作为方法参数,lambda表达式允许使用更简洁的代码来创建只有一个抽象方法的接口(这种接口被称为函数式接口)的实例,相当于一个匿名的方法。

    1.1 Lambda表达式入门

    Lambda表达式由三部分组成:

    • 形参列表。形参列表允许省略形参类型,如果只有一个参数,那么形参列表的圆括号也可以删除。
    • 箭头(->)
    • 代码块。Lambda表达式需要返回值,如果Lambda表达式代码块只有一条返回语句,则可以省略return关键字和包裹这条语句的花括号,表达式自动返回这条语句。

    Lambda表达式作为参数使用时,相当于一个任何类型的对象。

    1.2 Lambda表达式与函数式接口

    Lambda 表达式的类型,也被称为“目标类型”,Lambda表达式的目标类型必须是函数式接口

    函数式接口代表只包含一个抽象方法的接口,可以包含多个默认方法,静态方法,但只能声明一个抽象方法。

    由于Lambda表达式的结果就是被当成对象,因此程序完全可以使用Lambda表达式进行赋值。例如

    Runnable r = ()->{
    for( int i =0;i <100;i++)
    { System.out.println(); } };

     1.3 Lambda的使用方式

    • 将Lambda表达式赋值给函数式接口类型变量
    • 将Lambda表达式作为函数式接口类型的参数传给某个方法
    • 使用函数时接口对Lambda表达式进行强制类型转换。

    例如上面代码可改成

    Object obj =(Runnable) ()->{
    for( int i =0;i <100;i++)
    {
    System.out.println();
    }
    };

    Java8在java.util.function包下定义了大量函数式接口,典型的有四类

    • XxxFunction。apply()抽象方法对参数进行处理转换,然后返回一个新的值。
    • XxxConsumer。accept()抽象方法也是对参数进行转换处理,不返回处理结果。
    • XxxxPredicate。test()抽象方法对参数进行判断,返回一个boolean值。
    • XxxSupplier。getAsXxx()抽象方法没有参数,会按某种逻辑算法返回一个数据。

    1.4 方法引用与构造器引用

        如果Lambda表达式代码块只有一条代码,还可以在代码块中使用方法引用和构造器引用 

    Lambda表达式支持的方法引用和构造器引用
    种类 实例 说明 对应的Lambda表达式
    引用类方法 类名::类方法 函数式接口被实现方法的参数传给该类方法作为参数 (a,b,...)->类名.类方法(a,b,...)
    引用特定对象的类方法 特定对象::实例方法 函数式接口被实现方法的参数传给该方法作为参数 (a,b,...)->特定对象.实例方法(a,b,...)
    引用某类对象的实例方法 类名::实例方法 函数式接口中被实现方法的第一个参数作为调用者,后面的参数全部传给该方法作为参数 (a,b,...)->a.实例方法(a,b,...)
    引用构造器 类名::new 函数式接口被实现方法的参数传给该构造器作为参数 (a,b,...)->new 类名(a,b,...)

     

     

     

     

     

     

     

     

    例如实例引用类方法

    interface Converter{
    Integer convert(String s);
    }
    //下面代码使用Lambda表达式创建Converter对象
    Converter converter1 = from -> Integer.valueOf(from);

    上面代码符合方法引用的条件,可以用下面的代码替换

    Converter converter1 = Integer::valueOf;

    其他类型的方法引用大同小异,由于篇幅,不在多做介绍

     

  • 相关阅读:
    django 开发Broken pipe from ('127.0.0.1', 58078)问题解决
    cocos2d-js中jsc逆向为js攻略
    ECshop 怎样修改商品详细页的“浏览次数”
    ecshop 加广告出现广告位的宽度值必须在1到1024之间
    Nginx 301重定向的配置
    ECSHOP安装百度编辑UEditor教程
    Ecshop商品详情页显示当前会员等级价格
    ECSHOP始终显示全部分类方法
    vps主机修改系统远程端口号/添加防火墙
    ecshop利用.htaccess实现301重定向的方法
  • 原文地址:https://www.cnblogs.com/yumiaoxia/p/9021317.html
Copyright © 2011-2022 走看看