Android 中使用Lambda表达式

2023-05-16

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

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

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

最终整个文件会像这样子

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

allprojects {
    repositories {
        jcenter()
    }
}

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

apply plugin: 'me.tatarka.retrolambda'

并且在android节点下加入

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

最终整个文件就像这样子

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'

}

现在让我们试试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()
      }
});

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 中使用Lambda表达式 的相关文章

随机推荐

  • 【无标题】

    起因 2010 年 xff0c 谷歌宣布退出地内市场的时候 xff0c 一直保留着 谷歌地图 和 谷歌翻译 这两个公共服务 有兴趣自行百度下谷歌和百度恩怨 在 2020 年 xff0c 谷歌停止了 谷歌地图 在内地的服务 现在 xff0c
  • vmware ESXI 裸金属架构 本地服务器 开启Intel VT-x(虚拟化技术)

    我想使用vmware ESXI 安装的WIN10虚拟机中装vmware软件再装win10 即虚拟机中套虚拟机 基于工作要求某个XXX项目需要开启VPN远程到客户内网进行维护 客户对网络审计比较严 安装VPN的那台机子识别码要上传服务器 基本
  • 对一个或多个实体的验证失败。有关详细信息,请参见“EntityValidationErrors”属性。

    因为是转载文章 在此标明出处 xff0c 以前有文章是转的没标明的请谅解 xff0c 因为有些已经无法找到出处 xff0c 或者与其它原因 如有冒犯请联系本人 xff0c 或删除 xff0c 或标明出处 因为好的文章 xff0c 以前只想收
  • leveldb之log文件

    leveldb之log文件 1 log文件在LevelDb中的主要作用是系统故障恢复时 xff0c 能够保证不会丢失数据 因为在将记录写入内存的Memtable之前 xff0c 会先写入Log文件 xff0c 这样即使系统发生故障 xff0
  • STM32单片机的CRL和CRH寄存器

    这里写目录标题 问题 xff1a 基础知识 xff1a 解释 xff1a 扩展PA1为输入 上 下拉 PA2为输入 上 下拉 PA1为输出 xff08 通用推挽输出50MHZ xff09 PA2为输出 xff08 通用推挽输出50MHZ x
  • visualsvn server 无法访问url

    IIS 发布网站 本机能访问 其它人访问不了 看一下服务端 VisualSVN Server 的服务有没有启动 x A 34 H g6 L N s 管理 服务 VisualSVN Server 备注 做为开发机子 手动优化自己的电脑吧 否则
  • JS日期加减,日期运算

    因为是转载文章 在此标明出处 xff0c 以前有文章是转的没标明的请谅解 xff0c 因为有些已经无法找到出处 xff0c 或者与其它原因 如有冒犯请联系本人 xff0c 或删除 xff0c 或标明出处 因为好的文章 xff0c 以前只想收
  • jQuery easyui 选中特定的tab

    获取选中的 Tab 1 获取选中的 tab panel 和它的 tab 对象 2 var pp 61 39 tt 39 tabs 39 getSelected 39 3 var tab 61 pp panel 39 options 39 t
  • Server Error in '/' Application. 解决办法

    Server Error in 39 39 Application Access to the path 39 E NetWeb2 Content upFile BClientExcel 大客户部通讯录导入 xlsx 39 is denie
  • easyui-datagrid 数据出不来(样式引起的bug)

    今天任务是需要从另一个项目中将某几个功能页面移植到现有的项目中 这是比较繁琐的功能 理解要移植功能的逻辑 xff08 业务逻辑 xff0c 涉及到的表和存储过程 xff09 页面样式 这么是我遇到的一个问题之一 xff1b 我需要展现一个e
  • c#切割字符串几种方法

    1 xff0c 按单一字符切割 string s 61 34 abcdeabcdeabcde 34 string sArray 61 s Split 34 c 34 oreach string i in sArray Console Wri
  • Linux

    一 常用操作以及概念 快捷键求助关机PATHsudo包管理工具发行版VIM 三个模式GNU开源协议 二 磁盘 磁盘接口磁盘的文件名 三 分区 分区表开机检测程序 四 文件系统 分区与文件系统组成文件读取磁盘碎片blockinode目录日志挂
  • 动态链接库与静态链接库的区别

    静态链接库与动态链接库都是共享代码的方式 xff0c 如果采用静态链接库 xff0c 则无论你愿不愿意 xff0c lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了 但是若使用 DLL xff0c 该 DLL 不必被包含在最终
  • ssm——小学期实训总结

    实训总结 经过这两个星期短暂的学习 xff0c 我学习了ssm的框架搭建与web前端设计基础 在第一个星期 xff0c 老师着重为我们讲了框架的原理 搭建与运用 xff1b 而在第二个星期 xff0c 重点则转移到了小组对项目的开发与研究上
  • ROS TF原理和使用方法

    ROS TF介绍 一 TF是什么 xff1f 1 TF是ROS的一个包 xff08 package xff09 2 TF能让用户随时记录各种坐标系之间的变换关系 3 TF能让用户在一个坐标系中进行坐标运算 xff0c 并将转换关系后的位置关
  • 分布式系统核心—日志

    分布式系统的核心组件 日志 有时也叫write ahead logs commit logs 或者事物 logs 通常指在应用所有的修改之前先写入日志 xff0c 一般会将重放日志 撤销日志都写进去 NoSQL数据库 KV存储 Hadoop
  • Linux 下常见的进程调度算法

    进程调度 xff1a 在操作系统中调度是指一种资源分配 调度算法是指 根据系统的资源分配策略所规定的资源分配算法 操作系统管理了系统的有限资源 xff0c 当有多个进程 或多个进程发出的请求 要使用这些资源时 xff0c 因为资源的有限性
  • Ubuntu18.04更换内核方法(原内核版本 4.15.0-38-generic)

    以下过程全部在root权限下操作 xff08 sudo su xff09 1 安装必备软件编译工具 xff1a apt get install libncurses5 dev build essential kernel package 注
  • Mac下使用Java反编译工具JD-GUI

    下载 下载JD GUI 我们选择 Mac 版的 jd gui osx 1 6 6 tar 下载解压打开即可使用 xff0c 不出意外的话出意外了 竟然提示我没有找到Java 版本 xff0c 我直接zsh 命令行下执行查看 java ver
  • Android 中使用Lambda表达式

    Android Studio默认使用Lambda表达式是会报错的 xff0c 即使你使用的是java 8 xff0c 为了在android studio中使用lambda表达式 xff0c 我们必须借助一个插件retrolambda xff