Как использовать Java 8 Stream API под Android 6.0

просто настройте проект с помощью Android Studio 2.2.3 с Java 1.8 и Android 7 (уровень API 24), пытаясь протестировать "новую" функцию 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 и наверху?

как я могу решить это безобразие?

спасибо заранее

1 ответов


обновление 2017-04-04

Джек устарел компания Google, заменив его чем-то под названием 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 и быстрое исследование того, как использовать его с идеей, не было плодотворным. Я обновлю этот ответ еще раз, как только выясню, как его использовать в идее.

старый ответ

некоторые функции языка Java 8 доступны при использовании компилятора Jack.

чтобы включить Jack, отредактируйте свой build.gradle вот так

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

больше информации можно найти здесь

однако я хотел бы добавить, что у меня был довольно плохой опыт работы с Джеком до сих пор, особенно при отладке. Я бы рекомендовал использовать streamsupport и retrolambda вместо пока пока сестра Джека!--47-->Джилл освобожден.