stream() 方法在android中不起作用

Posted

技术标签:

【中文标题】stream() 方法在android中不起作用【英文标题】:stream() method does not work in 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()。

你能帮帮我吗?

【问题讨论】:

不,我不问使用 java 8 的可能性,因为我已经在使用它:我问的是 android 中 stream() 的等效方法 所以你想要一个for 循环? 您在寻找developer.android.com/preview/j8-jack.html 吗? 一种可能性是使用 streamsupport (github.com/streamsupport/streamsupport) 库,它将流 API 反向移植到 java 6/7。 @tome 嗯,streamsupport其实在sourceforge上sourceforge.net/projects/streamsupportgithub项目就是一个镜像。 【参考方案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 设备不兼容。

以上是关于stream() 方法在android中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

滑动方法在android自动化测试中不起作用

当我在终端中测试时,推送通知在终端中不起作用

Spin ner OnItemSelected在Android Studio中不起作用[关闭]

findElement 在 Android 上的 Appium 中不起作用

Webview 在 Fragment Android Studio 中不起作用

Ionic 3 本地通知 LED/声音在 Android 中不起作用