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中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Spin ner OnItemSelected在Android Studio中不起作用[关闭]
findElement 在 Android 上的 Appium 中不起作用