如何在Android 6.0下使用Java 8 Stream API [英] How to use Java 8 Stream API under Android 6.0
问题描述
只需使用带有 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 的体验非常糟糕,尤其是在调试时.我建议使用 streamsupport 和 retrolambda 而不是 直到 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屋!