在android studio中无法解析Arrays.stream

时间:2016-10-27 03:06:47

标签: android android-studio

我正在尝试在Android Studio中使用lambda表达式filter an array

String[] a = { "s", "", "1", "", "" };
a = Arrays.stream(a).filter(s -> !s.isEmpty()).toArray(String[]::new);

我在编译时收到错误'无法解决方法stream'

enter image description here

其他Lambda表达式(比如点击事件) 正在工作,我在我的应用程序gradle中定位java 1.8:

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
    incremental = false;
}

File -> Project Stucture下我使用的是嵌入式JDK,即使我切换到最新的Java 8 JDK,我仍然会收到错误。

有趣的是,如果我将切换回到VERSION_1_7,那么我的普通工作lambda语句会产生编译错误。

如何在Android Studio中使用此过滤器?

1 个答案:

答案 0 :(得分:3)

Java8语言功能与Java8-API之间存在差异。 Android仅支持每个的子集。 Lambdas是Java8语言的一项功能。而流API是Java8-API中引入的API。

语言功能由编译器实现,可能需要一些API支持,而Java-API需要存在于设备上。

这意味着您可以将lambda用于具有minSdkVersion<的应用程序。但是你不能使用流API,因为它只是> = 24的sdk的一部分。

https://developer.android.com/guide/platform/j8-jack.html#supported-features

在其他" Java技术"中也是如此。通常,Eclipse编译器可以具有1.8的源兼容性和1.7的目标兼容性,这将允许您使用lambdas,但不允许使用流(当在java7 vm上运行时,在java8 vm上运行它将起作用)