Android Studio 中使用Java 8 特性
来源:互联网 发布:如龙淘宝怎么搜 编辑:程序博客网 时间:2024/06/06 00:06
概述
lambda和Stream表达式是java8引入的新特性,要理解lambda表达式,其中最重要的概念就是函数式接口(functional interface),而在android中有很多这种接口,如点击事件OnclickListener等。简单来说,函数式接口是只包含一个抽象方法的接口。比如Java标准库中的java.lang.Runnable
和java.util.Comparator
都是典型的函数式接口。
来看一下lanbda语法,以java.util.Comparator
接口为例
普通写法:
List<String> stringList = new ArrayList<>(); Collections.sort(stringList, new Comparator<String>() { @Override public int compare(String lhs, String rhs) { return lhs.compareTo(rhs); } });
lambda写法:
Collections.sort(stringList, (lhs, rhs) -> lhs.compareTo(rhs));
使用Rxjava的朋友,肯定对这种语法很熟悉。lanbda更多特性参照
Java 8 Tutorial
retrolambda
在android 中磨人是不支持java8的,那么该如何使用呢,在android中我们必须借助一个插件retrolambda@[Github],该插件将java 8中的lambda表达式特性兼容到java 5。
引入步骤
download and install java8
在project的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节点下加入环境支持
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 "com.bobomee.android.lambda.sample" 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'}
Stream
同时Stream API让我们对于集合的操作也变得十分的简洁
Stream.of(/* array | list | set | map | anything based on Iterator/Iterable interface */) .filter(..) .map(..) ... .sorted() .forEach(..);Stream.of(value1, value2, value3)...Stream.ofRange(0, 10)...
具体可参考:Lightweight-Stream-API@[Github]
Java 8 Stream on Android
测试
imageView.post(()-> Toast.makeText(this,"lambda-test",Toast.LENGTH_LONG).show());
这里模拟了Runnable接口,如果打出toast,则说明引入成功了,否则clean或者同步一下工程即可。
1 0
- Android Studio 中使用Java 8 特性
- 在Android中使用Java 8特性
- Android studio 2.4 支持java 8 特性
- Android Studio中使用Android5.0新特性CardView
- android studio中添加retrolambda,并使用idk8新特性的配置记录
- 在 Android N 预览版中使用 Java 8 的新特性
- Android studio中使用jdk1.8
- Android 系列 1.8在Android Studio 2中使用Java 8功能
- Android Studio 使用Java 8 混淆出错
- Android studio 中使用GeenDao
- Android studio中使用fastjson
- Android Studio中使用AIDL
- android studio 中使用aidl
- Android Studio中使用NDK
- Android Studio 中使用IconFont
- Android Studio 中使用Lambda
- android studio中使用lambda
- Android studio 中使用svn
- iOS键盘隐藏,下一个textField,键盘控制第三方好用框架IQKeyboardManager
- 进桌面卡、慢,网卡转圈圈
- myeclipse的配置
- 主机字节序列和网络字节序列
- 《从零开始自学iOS》_04
- Android Studio 中使用Java 8 特性
- CodeForces 609B.The Best Gift
- 【夜读】杨澜:我可以接受失败,但不能接受没有尝试
- Sorry,this application cannot run under a Virtual Machine
- Java线程:概念与原理
- 表单数据加密
- SpringMVC——注解类型(一)
- WebKit之WebRTC的研究
- WPF:Provide value on 'System.Windows.Baml2006.TypeConverterMarkupExtension'