我正在尝试在Android Studio中使用lambda表达式filter an array
String[] a = { "s", "", "1", "", "" };
a = Arrays.stream(a).filter(s -> !s.isEmpty()).toArray(String[]::new);
我在编译时收到错误'无法解决方法stream
'
其他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中使用此过滤器?
答案 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上运行它将起作用)