如何在Android 6.0下使用Java 8 Stream API [英] How to use Java 8 Stream API under Android 6.0

查看:422
本文介绍了如何在Android 6.0下使用Java 8 Stream API的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

只需使用带有Java 1.8和Android 7(API级别24)的Android Studio 2.2.3来建立一个项目,尝试测试新" java 8功能Stream.

Just set up a project using Android Studio 2.2.3 with Java 1.8 and Android 7 (API Level 24) trying to test the "new" java 8 feature Stream.

这是我的gradle文件:

Here my gradle file:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.example.radinator.myproject"
        minSdkVersion 24
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.2.0'
    testCompile 'junit:junit:4.12'
}

代码在这里:

import java.util.stream.*;
public class MainActivity extens Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mainactivity);
    }

    void foo(){
        List<String> myList = Arrays.asList("one", "two", "three", "four", "five", "six");
        myList.stream()
            .filter(s -> s.length() > 0)
            .collect(Collectors.toList())
    }

}

Android Studio在myList.stream()...行下划线,告诉我"Usage of API documented as @since 1.8+" Gradle正在编译所有内容,但为什么会收到此消息?我以为该功能是Java 8引入的,可在Android API Leve 24及更高版本下使用?

Android Studio underlines the line myList.stream()... telling me "Usage of API documented as @since 1.8+ " Gradle is compiling everything but why do I get this message? I thought this feature is introduced with Java 8 and available under Android API Leve 24 and above?

我该如何解决这个混乱局面?

How can I solve this mess?

预先感谢

推荐答案

更新 2017-04-04

Update 2017-04-04

杰克已弃用,Google将其替换为 desugar .现在可以在 Android Studio 2.4中使用预览4 及更高版本.

Jack is deprecated, Google is replacing it with something called desugar. It is now available with Android Studio 2.4 preview 4 and later.

Java 8语言/库功能的可用性仍然取决于设备API级别和Android Studio版本,因此请确保

Java 8 language/library feature availability is still dependent on the device API level and Android Studio version so make sure to double check what you can and can't use.

要使用它,您只需将源语言级别和目标语言级别设置为Java 8.

To use it you'd just set the source and target language levels to Java 8.

android {
    ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

请注意,如果您已经在使用Retrolambda或jack,则需要禁用它们才能使用脱糖.您可以在此处找到更多信息.

Note that if you're already using retrolambda or jack, you will need to disable them for desugar to be used. You find more info on how to use it here.

我还没有尝试过它,因为我更喜欢IntelliJ IDEA,并且快速研究如何将其与IDEA一起使用并没有取得成功.一旦弄清楚如何在IDEA中使用它,我将再次更新此答案.

I have not yet tried it myself since I prefer IntelliJ IDEA and quick research into how to use it with IDEA wasn't fruitful. I will update this answer again once I figure out how to use it in IDEA.

旧答案

某些使用Jack编译器时可以使用Java 8语言功能.

Some Java 8 language features are available when using Jack compiler.

要启用杰克,请像这样编辑您的build.gradle

to enable Jack, edit your build.gradle like so

android {
    ...
    defaultConfig {
        ...
        jackOptions {
            enabled true
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

可以在此处找到更多信息.

但是,我想补充一点,到目前为止,我对jack的使用经验很差,尤其是在调试时.我建议使用 streamsupport

However, I would like to add that I've had pretty bad experience with jack so far, especially when debugging. I would recommend using streamsupport and retrolambda instead for now until jack's sister Jill is released.

这篇关于如何在Android 6.0下使用Java 8 Stream API的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆