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;

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

     

  • 相关阅读:
    git(1)-git关联GitHub-windows-转载
    jenkins(4)-jenkins配置邮件通知
    jenkins(3)-linux下安装jenkins(yum install方式)
    【PAT甲级】1090 Highest Price in Supply Chain (25 分)(DFS)
    【PAT甲级】1087 All Roads Lead to Rome (30 分)(MAP【int,string】,邻接表,DFS,模拟,SPFA)
    【PAT甲级】1018 Public Bike Management (30 分)(DFS,SPFA)
    Educational Codeforces Round 61 (Rated for Div. 2) G(线段树,单调栈)
    Atcoder Grand Contest 032C(欧拉回路,DFS判环)
    Educational Codeforces Round 62 (Rated for Div. 2)E(染色DP,构造,思维,组合数学)
    Atcoder Grand Contest 031C(构造,思维,异或,DFS)
  • 原文地址:https://www.cnblogs.com/yumiaoxia/p/9021317.html
Copyright © 2011-2022 走看看