Android中使用lambda表达式
来源:互联网 发布:网络匿名性的缺点 编辑:程序博客网 时间:2024/06/05 17:57
lambda 语法简介
视频为本篇播客知识点讲解,建议采用超清模式观看, 欢迎点击订阅我的优酷
如果刚学Android,不知道怎么写点击事件可以跳转,传送门
要想在Android中使用lambda语法,首先我们需要了解下lambda语法是什么?
lambda语法是java8的新特性,能够大量减少匿名内部类那种冗余的代码。
我们先来看看老版的java代码,比如排列字符串:
List<String> names = Arrays.asList("peter", "anna", "mike", "xenia");Collections.sort(names, new Comparator<String>() { @Override public int compare(String a, String b) { return b.compareTo(a); }});
只需要给静态方法 Collections.sort 传入一个List对象以及一个比较器来按指定顺序排列。通常做法都是创建一个匿名的比较器对象然后将其传递给sort方法。
在Java 8 中你就没必要使用这种传统的匿名对象的方式了,Java 8提供了更简洁的语法,lambda表达式:
Collections.sort(names, (String a, String b) -> { return b.compareTo(a);});
看到了吧,代码变得更段且更具有可读性,但是实际上还可以写得更短,
对于函数体只有一行代码的,你可以去掉大括号{}以及return关键字:
Collections.sort(names, (String a, String b) -> b.compareTo(a));
起始你还可以挑战下lambada的极限,还可以写得更短点:
Collections.sort(names, (a, b) -> b.compareTo(a));
当然lambda语法还有好多新特性,
比如我们可以直接在lambda表达式中访问外层的局部变量:
public void method(){ String i="i"; button.setOnClickListener(v->{ Log.i("lambda",i); // 不报错 // i="a"; // 编译报错 }); }
和之前不同的是,这里的变量i可以不用声明为final,不过这里的i必须不可被后面的代码修改(即隐性的具有final的语义)
Android中使用lambda表达式
我们刚刚简单介绍了java8的新特性lambda,接下来我们就来看看怎么在Android中使用lambda。
由于lambda是java8新特性,所以请确保你的电脑里面有jdk8,然后记得Android Studio中配置jdk环境
注意,后面的才是重点, 因为google公司和oracle公司一直在打官司,所以Android默认是不支持java8的,如果你直接在代码中使用lambda语法,编译的时候就会提示“lambda expression are not supported at this language level”。
虽然不能直接使用,但是Android Studio这个工具相当棒,我们可以通过集成插件的形式使用,github地址
步骤1:
我们需要首先在项目根目录的build.gradle文件中添加依赖 “me.tatarka:gradle-retrolambda:3.2.0”
dependencies { classpath 'com.android.tools.build:gradle:1.3.0' classpath 'me.tatarka:gradle-retrolambda:3.2.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files }
步骤2
在module目录下的build.gradle文件中应用插件
apply plugin: 'com.android.application'apply plugin: 'me.tatarka.retrolambda'
步骤3
在module目录下build.gradle文件中的android节点下还需要表明使用jdk8,需要做如下配置:
compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }
配置完以后,预览下module目录下的build.gradle
apply plugin: 'com.android.application'apply plugin: 'me.tatarka.retrolambda'android { compileSdkVersion 23 buildToolsVersion "23.0.1" defaultConfig { applicationId "com.demo.myapplication" minSdkVersion 14 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:23.0.1'}
经过上面3步,我们就可以在Android中使用lambda语法了,来看看效果:
当我们直接使用匿名内部类的时候,自动就提示我们lambda语法了。
- Android 中使用Lambda表达式
- Android中使用lambda表达式
- Android中使用lambda表达式
- Android 中使用lambda表达式
- Android 中使用Lambda表达式
- Android 中使用Lambda表达式
- Android中使用Lambda表达式
- Android Studio中使用Lambda表达式
- android studio 中使用lambda表达式
- 在Android Studio中使用Lambda表达式
- 在Android Studio中使用Lambda表达式
- Android Studio 中使用 Lambda表达式
- Android Studio中使用Lambda表达式
- Android Studio中使用Lambda表达式
- android studio 中使用lambda表达式
- Android Studio中使用lambda表达式
- Android中使用Lambda表达式高效开发
- android中lambda表达式使用示例
- 二十三种设计模式之结构型模式之代理模式
- oc的内存管理和@property的属性关键字
- android多国语言文件夹文件汇总
- HTML5 Canvas使用路径——绘制圆形
- 方法重载和重写(覆盖)的区别
- Android中使用lambda表达式
- CYC-数据解析1
- python 计算文本的相似度
- javascript内存泄漏总结
- ERROR! The server quit without updating PID file!!!(已解决!!!)
- 结构体对齐问题
- CYC- 数据解析2
- elasticsearch基本概念
- asp.net后台获取路径的各种方法归纳