簡體   English   中英

如何在Android 6.0下使用Java 8 Stream API

[英]How to use Java 8 Stream API under Android 6.0

只需使用帶有Java 1.8和Android 7(API Level 24)的Android Studio 2.2.3設置一個項目,試圖測試“新的”java 8功能Stream

這是我的gradle文件:

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及更高版本下使用?

我怎么能解決這個爛攤子?

提前致謝

更新 2017-04-04

傑克已被棄用 ,谷歌正在用名為desugar的東西取而代之。 它現在可用於Android Studio 2.4預覽版4及更高版本。

Java 8語言/庫功能可用性仍取決於設備API級別和Android Studio版本,因此請務必仔細檢查您可以使用和不能使用的內容

要使用它,您只需將源語言和目標語言級別設置為Java 8。

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

請注意,如果您已經使用了retrolambda或jack,則需要禁用它們才能使用desugar。 您可以在此處找到有關如何使用它的更多信息。

我自己還沒有嘗試過,因為我更喜歡IntelliJ IDEA,並且快速研究如何將它與IDEA一起使用並不富有成效。 一旦我弄清楚如何在IDEA中使用它,我將再次更新這個答案。

老答案

使用Jack編譯器時可以使用某些 Java 8語言功能。

要啟用Jack,請像這樣編輯build.gradle

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

更多信息可以在這里找到

但是,我想補充一點,到目前為止我對jack的體驗非常糟糕,特別是在調試時。 我會建議使用streamsupportretrolambda代替 現在直到傑克的妹妹吉爾被釋放

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM