【Android】Lambda表达式

本文主要分以下几个模块:

  • 什么是lambda
  • Android如何使用
  • lambda语法和结构
  • demo

================================================================


1.什么是lambda


Lambda 表达式,也被称为闭包,是为开发者提供用简单和紧凑的方式表示数据的匿名函数。
Lambda是一种匿名表达式,retrolambda使得Android能使用lambda特性

2.Android如何使用


在android中是使用Retrolambda的gradle插件,就能在代码中使用lambda了。
  • Android Studio配置Retrolambda
  • Android Studio自动生成lambda

    Android Studio配置Retrolambda

    (1).lambda需要安装JDK8,最新版本下载地址点这里:jdk-8u91
    (2).build.gradle

    buildscript {

     repositories {
          jcenter()
     } 
     dependencies {
          classpath 'com.android.tools.build:gradle:1.5.0'
          //加上下面这句依赖,会使用retrolambda来编译Java代码
          classpath 'me.tatarka:gradle-retrolambda:3.2.4'
     }
    

    }

    (3).app/build.gradle

    apply plugin: ‘com.android.application’
    apply plugin: ‘me.tatarka.retrolambda’//加上这句加,入plugin声明
    android {
    ……
    compileOptions {//使用JAVA8语法解析
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
    }
    }
    retrolambda {//指定将源码编译的级别,使用下列代码,会将代码编译到兼容1.6的字节码格式
    javaVersion JavaVersion.VERSION_1_6
    }

    Android Studio自动生成lambda

    1.当配置Retrolambda成功后,Android Studio会有提示,按Alt+Enter键
    当配置Retrolambda成功后,Android Studio会有提示,按Alt+Enter键

    2.点击替换,这样就能自动生成,使用lambda了。【Android】Lambda表达式_第1张图片

3.lambda语法和结构


语法结构

input -> body

intput种类


  • 无输入 void
    () -> body
new Thread(new Runnable() {
          @Override
          public void run() {
              Log.d("test", "retrolambda表达式");
          }
      });

//使用lambda表达式
new Thread(() -> Log.d("test", "retrolambda表达式"));
  • 一个参数输入
    x -> body
view.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
               Log.d("test", "retrolambda表达式");
          }
});

//使用lambda表达式
view.setOnClickListener(v -> Log.d("test", "retrolambda表达式"));
  • 多个参数输入
    (x, y) -> x + y;
List<String> names = Arrays.asList("张三", "李四", "王二", "麻子");
Collections.sort(names, new Comparator<String>() {
          @Override
          public int compare(String a, String b) {
              return b.compareTo(a);
}
      });
Log.d("test", name.toString());

//使用lambda表达式
List<String> names = Arrays.asList("张三", "李四", "王二", "麻子");
Collections.sort(names, (a, b) -> b.compareTo(a));
Log.d("test", name.toString());
  • 不省略型別
    (int x, int y) -> x + y;

body 种类


  • 啥都没做

    () -> {}

  • 单行没有返回值,单行可省略{}

    (x, y) -> x + y;

  • 单行有返回值,单行可省略{}

    //注意没有分号结尾
    (x, y) -> x + y

    Observable.just("test", "lambda")
        .map(new Func1<String, String>() {
                  @Override
                  public String call(String s) {
                      return s.toUpperCase();
                  }
        });
    //使用lambda表达式
    Observable.just("test", "lambda")
         .map(s -> s.toUpperCase());
  • 多行不需要有返回值

    (a, b) ->{
    int x = 0 ;
    int y = 1;
    Log.d("test", x+y);
    }

  • 多行需要有返回值

    (a, b) ->{
    int x = 0 ;
    int y = 1;
    return x+y;
    }

4.Demo

gitHub

你可能感兴趣的:(android)