Android Studio 中使用Java 8 特性

概述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值