【问题标题】:cannot resolve Arrays.stream in android studio无法在 android studio 中解析 A​​rrays.stream
【发布时间】:2016-10-27 03:06:47
【问题描述】:

我正在尝试在 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,我仍然会收到错误。

有趣的是,如果我将 back 切换到 VERSION_1_7,那么我之前工作的 lambda 语句会出现编译错误。

如何让这个过滤器在 Android Studio 中工作?

【问题讨论】:

  • 您的编译器配置中会不会有旧的 rt.jar?
  • @PaulHicks 你能指出我在哪里检查编译器配置吗?
  • Nougat 之前的 Android 不支持 Java 8。
  • @SergeyGornostaev 那么为什么 lambda 会起作用?

标签: android android-studio


【解决方案1】:

Java8 语言功能和 Java8-API 之间存在差异。 Android 仅支持其中的一个子集。 Lambda 是 Java8 语言的一个特性。而stream API是Java8-API中引入的API。

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

这意味着您可以在 minSdkVersion =24 的 sdk 的一部分。

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

您在其他“Java 技术”中也有同样的情况。通常,Eclipse 编译器可以具有 1.8 的源兼容性和 1.7 的目标兼容性,这将允许您使用 lambda,但不能使用流(在 java7 vm 上运行时,在 java8 vm 上它可以工作)

【讨论】:

    猜你喜欢
    • 2019-06-15
    • 2019-03-29
    • 2016-09-17
    • 2023-01-18
    • 1970-01-01
    • 2018-01-28
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多