JDK1.8(Lambda语法)

版权声明:版权声明:本文为博主原创文章,未经博主允许不得转载,违者必究。 https://blog.csdn.net/Cricket_7/article/details/89764221

1,介绍

【1】lambda是什么? 

  • 简单的说就是一个表达式,用来优化匿名对象。

  • "Lambda 表达式"(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数 所以试着使用匿名函数的方式来理解

(params) -> expressio//函数名呢?没有!!!

(params) -> statemen//函数名呢?没有!!!

(params) -> { statements } //函数名呢?没有!!!》》

【2】语法是什么?

  • 包含三个部分 一个括号内用逗号分隔的形式参数,参数是函数式接口里面方法的参数 一个箭头符号:->方法体,可以是表达式和代码块,方法体函数式接口里面方法的实现,如果是代码块,则必须用{}来包裹起来,且需要一个return 返回值,但有个例外,若函数式接口里面方法返回值是void,则无需{}

(parameters) -> expression

(parameters) -> { statements; }
  • Lambda表达式是在JDK 8中开始支持的一种函数式推导语言,能够大量减少匿名内部类那种冗余的代码。在Android中,可以大量步回调等场景。Lambda表达式 vs 匿名类既然lambda表达式即将正式取代Java代码中的匿名内部类,那么有必要对二者做一个比较分析。

  • 不同点一:关键字 this。匿名类的 lambda表达式的 this 关键字指向包围lambda表达式的类。

  • 不同点二:编译方式。Java编译器将lambda表达式编译成类的私有方法。

2,Android studio 关联Lambda 

【1】Github地址:https://github.com/evant/gradle-retrolambda

【2】导入步骤

  • 在项目的build.gradle 文件中添加仓库,添加路径


 

buildscript {

    repositories {

        jcenter()

        mavenCentral()

    }

    dependencies {

        classpath 'com.android.tools.build:gradle:2.2.2'

        classpath 'me.tatarka:gradle-retrolambda:3.3.1'

        // NOTE: Do not place your application dependencies here; they belong

        // in the individual module build.gradle files

    }

}





allprojects {

    repositories {

        jcenter()

        mavenCentral()

    }

}

  • 在app/build.gradle 中配置

apply plugin: 'me.tatarka.retrolambda'



android {

    compileSdkVersion 25

    buildToolsVersion "25.0.0"

    defaultConfig {

    }

    buildTypes {

    }

    compileOptions {

    sourceCompatibility JavaVersion.VERSION_1_8

    targetCompatibility JavaVersion.VERSION_1_8

    }

}

dependencies {

}

3,Lambda 表达式

【1】匿名内部类

  • java正常语法

Button.setOnClickListener(new MyListener() {

    @Override

    public void onClick(View v) {

        System.out.println("ss");

    }

});
  • Lambda 表达:使用Lambda表达式替换匿名对象,匿名对象的接口只能有一个抽象方法

myButton.setOnClickListener((View v)->System.out.println("ss"));
  • 如果只有一个参数可以直接去掉变量名,如果有两句输出语句必须添加{} 

myButton.setOnClickListener(v->System.out.println("ss"));

【2】无参数,无返回值的lambda表达式

  • 创建一个类,实现onClick 接口方法,使用Lambda表达式替换匿名对象,匿名对象的接口只能有一个抽象方法

  

  class MyButton {

        public void setOnClickListener(MyListener listener){}

    }



    interface MyListener{

        void onClick();



    }
  • 调用Java实现

MyButton myButton = new MyButton();

myButton.setOnClickListener(new MyListener() {

    @Override

    public void onClick() {

        System.out.println("ss");

    }

});
  • Lambad 无参数表达。(无参数,无返回值,lambda 必须写小括号)

myButton.setOnClickListener(()->System.out.println("ss"));*/

【3】有参数,无返回值的lambda表达式

  • 接口方法中有一个参数,

   class MyButton {

        public void setOnClickListener(MyListener listener){

        }

    }

    interface MyListener{

        void onClick(String s);

    }
  • 调用Java实现

MyButton myButton = new MyButton();

myButton.setOnClickListener(new MyListener() {

    @Override

    public void onClick(String s) {

        System.out.println("ss");

    }

});
  • Lambad有一个参数表达:如果只有一个参数,可以不要小括号

// 如果只有一个参数,可以不要小括号

myButton.setOnClickListener(s->System.out.println("ss"));*/

【4】有参数,有返回类型的lambda表达式

  • 接口方法中有一个参数,有返回值

  class MyButton {

        public void setOnClickListener(MyListener listener){

        }

    }

    interface MyListener{

        boolean onClick(String s);

     

    }

}
  • java 调用

/*MyButton myButton = new MyButton();

myButton.setOnClickListener(new MyListener() {

    @Override

    public boolean onClick(String s) {

        return false;

    }

});
  •  带返回值,如果只有一个返回结果,不需要写return

myButton.setOnClickListener(s->true);

【4】有2个参数,有返回类型的lambda表达式

  • 接口方法中有2个参数,有返回值

  

class MyButton {

        public void setOnClickListener(MyListener listener){

        }

    }

    interface MyListener{

        boolean onClick(String s,int i);

    }
  • java调用

MyButton myButton = new MyButton();

myButton.setOnClickListener(new MyListener() {

    @Override

    public boolean onClick(String s, int i) {

        return false;

    }

});
  •  2个参数,有返回结果,还有两个语句

// 两个以上参数,不能删除小括号

myButton.setOnClickListener((String s, int i)-> {System.out.println("ss"); return false});

猜你喜欢

转载自blog.csdn.net/Cricket_7/article/details/89764221