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

查看:21
本文介绍了如何在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()... 告诉我API 的使用记录为 @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

Jack 已弃用,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,则需要禁用它们才能使用 desugar.您可以在此处找到有关如何使用它的更多信息.

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.

旧答案

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

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

要启用 Jack,请像这样编辑您的 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 的体验非常糟糕,尤其是在调试时.我建议使用 streamsupportretrolambda 而不是 直到 jack 的妹妹 吉尔被释放.

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天全站免登陆