【问题标题】:stream() method does not work in androidstream() 方法在android中不起作用
【发布时间】:2016-10-17 16:17:07
【问题描述】:

如何将此语句从经典 java 转换为 android

Collection<Integer> p1;   
int sum = p1.stream().mapToInt(Integer::intValue).sum();

我将 Java 8 和 lambda 集成到我的 android 应用程序中,但它仍然无法正常工作。在android中找不到方法stream()。

你能帮帮我吗?

【问题讨论】:

标签: android android-studio collections lambda java-8


【解决方案1】:

您可以使用 streamsupport 库,它将流 API 向后移植到 Java 6/7,可用于 Android 开发,所有设备都支持。

Afaik,这个库完全支持 Java 8 中的原始实现,并使其在单独的包中可用(前缀 java8.)。 Collection 接口上添加的默认方法(例如#stream()、#forEach())可从单独的实用程序类中获得,例如可迭代或 StreamSupport。

【讨论】:

  • 它是否有 Gradle 的 maven repo,或者我们必须使用物理 jar 文件?
  • @Igor Ganapolsky 这些罐子在 Maven 中心。从 Gradle 使用它们没问题。
【解决方案2】:

Stream API 包含在 Android 7.0 SDK 平台 (API 24) 的最新版本中:

public interface Collection<E> extends Iterable<E> {
    // .. redacted
    default Stream<E> stream() { .. }
}

请注意,要使用它,您必须将 minSdkVersion 设置为 24。

【讨论】:

  • 你知道吗,是否有可能以某种方式使用 minSdk
  • @Beloo 我自己没有尝试过,但T.Neidhart mentioned 似乎可以满足您的需求。你试过了吗?
  • @Beloo 是的,streamsupport 应该适合你。我还没有和杰克一起尝试过,但我看不出有什么理由不应该工作。 Android 世界中很多人都将它与 retrolambda 插件一起使用,但 Jack 应该没问题。
  • 设置 minSdkVersion 24 会导致大多数 Android 设备不兼容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多