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

  • 什么是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键

    2.点击替换,这样就能自动生成,使用lambda了。

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

更多相关文章

  1. android ViewModelProviders被弃用解决方案
  2. Ubuntu下查找.android/avd
  3. Design Widget
  4. TabWidget/TabHost的两种使用方法
  5. 极光推送的使用
  6. 查看基于Android(安卓)系统单个进程内存、CPU使用情况的几种方法
  7. 箭头函数的基础使用
  8. NPM 和webpack 的基础使用
  9. Python list sort方法的具体使用

随机推荐

  1. Android(安卓)API Guiede---Animation an
  2. Android下音标字体的相关问题
  3. android Task类
  4. android批量文件上传(android批量图片上传
  5. Android(安卓)图片内存溢出(Out of Memory
  6. 7种例子讲解Android(安卓)Dialog!
  7. Android(安卓)蓝牙串口调试程序开发
  8. 深入Android开发FAQ的详解
  9. [置顶] android图形系统详解六:View layer
  10. Android添加可拖动、点击的悬浮窗口