Android 中使用Lambda表达式

Android Studio默认使用Lambda表达式是会报错的,即使你使用的是Java 8,为了在android studio中使用lambda表达式,我们必须借助一个插件retrolambda ,该插件将Java 8中的lambda表达式特性兼容到java 5。使用它也很简单。

首先先项目根目录下的build.gradle中加入

classpath 'me.tatarka:gradle-retrolambda:3.2.0'
 
 
  • 1
  • 1

最终整个文件会像这样子

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.2.3'
        classpath 'me.tatarka:gradle-retrolambda:3.2.0'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

然后再module目录下的build.gradle中使用插件,加入

apply plugin: 'me.tatarka.retrolambda'
 
 
  • 1
  • 1

并且在android节点下加入

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
 
 
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

最终整个文件就像这样子

apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda'
android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "cn.edu.zafu.rxdemo"
        minSdkVersion 15
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.0'

}

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

现在让我们试试lambda表达式,就拿View的点击事件做实验吧。

在使用lambda表达式之前是这样子的

btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
          Toast.makeText(getApplicationContext(), "test", Toast.LENGTH_LONG).show()
      }
});
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

使用了lambda表达式之后是这样子的

btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(v -> Toast.makeText(getApplicationContext(), "test", Toast.LENGTH_LONG).show()
);
 
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

好了,运行一下项目,如果点击按钮出现了Toast说明你成功了,但是如果你运行出现ClassNotFound的错误的话clean一下项目,再编译运行,就能成功运行了。

怎么样,有没有发现代码精简了许多。这篇文章算是开始RxJava(RxAndroid)的学习之路的第一篇博文吧,毕竟RxJava大量使用了lambda表达式特性。虽然也可以不用lambda表达式,但是使用了lambda表达式后会显得代码特别精简。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值