失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Android Studio 中使用Java 8 特性

Android Studio 中使用Java 8 特性

时间:2024-01-30 19:16:43

相关推荐

Android Studio 中使用Java 8 特性

概述

lambda和Stream表达式是java8引入的新特性,要理解lambda表达式,其中最重要的概念就是函数式接口(functional interface),而在android中有很多这种接口,如点击事件OnclickListener等。简单来说,函数式接口是只包含一个抽象方法的接口。比如Java标准库中的java.lang.Runnableparator都是典型的函数式接口。

来看一下lanbda语法,以parator接口为例

普通写法:

List<String> stringList = new ArrayList<>();Collections.sort(stringList, new Comparator<String>() {@Overridepublic int compare(String lhs, String rhs) {return pareTo(rhs);}});

lambda写法:

Collections.sort(stringList, (lhs, rhs) -> pareTo(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_8targetCompatibility JavaVersion.VERSION_1_8}}

完整代码:

apply plugin: 'com.android.application'apply plugin: 'me.tatarka.retrolambda'android {compileSdkVersion 22buildToolsVersion "22.0.1"defaultConfig {applicationId "com.bobomee.android.lambda.sample"minSdkVersion 15targetSdkVersion 22versionCode 1versionName "1.0"}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility 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或者同步一下工程即可。

如果觉得《Android Studio 中使用Java 8 特性》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。