stream() 方法在安卓设备上不起作用。

3

我该如何将这个经典Java语句转换为Android语句?

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

我将Java 8和lambda应用到了我的安卓应用上,但是它还不能正常工作。其中stream()方法在安卓上并不存在。

你能帮我吗?


所以你想要一个 for 循环? - Tunaki
我想转换所有语句,因为当stream()方法不可用时,mapToInt()和sum()也不可用。 - User_87
1
你是否在寻找 https://developer.android.com/preview/j8-jack.html? - Alexis C.
4
一种可能性是使用streamsupport(https://github.com/streamsupport/streamsupport)库,它将流API后移至Java 6/7。 - T. Neidhart
3
@tome,实际上streamsupport在sourceforge上 https://sourceforge.net/projects/streamsupport/,而github项目是一个镜像。 - Stefan Zobel
显示剩余4条评论
2个回答

5
您可以使用 streamsupport 库,该库将流 API 回溯到 Java 6/7,可用于 Android 开发,并支持所有设备。
据我所知,该库完全回溯了 Java 8 中的原始实现,并使其在单独的包(前缀为 java8.)中可用。集合接口上添加的默认方法(例如 #stream()、#forEach())可从单独的实用程序类(例如 Iterables 或 StreamSupport)中使用。

它是否有适用于Gradle的Maven仓库,还是我们必须使用物理JAR文件? - IgorGanapolsky
2
@Igor Ganapolsky 这些JAR包已经在Maven Central上了。从Gradle中使用它们没有问题。 - Sartorius

0

流 API 已包含在最近的 Android 7.0 SDK 平台(API 24)修订版中:

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

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

你知道吗,也许有可能以某种方式在minSdk<24上运行这样的API?例如使用Jack编译器或其他工具。应该有一些方法可以进行后移植,我很自豪) - Beloo
2
@Beloo 我自己没有尝试过,但是根据T.Neidhart提到的,似乎steamsupport库正好符合你的需求。你试过了吗? - Alex Lipov
3
@Beloo,是的,streamsupport对你应该可行。我还没有在Jack上尝试过它,但我认为它应该可以工作。许多安卓开发者已经在retrolambda插件中使用了它,但Jack也应该没问题。 - Stefan Zobel
minSdkVersion 24设置为最低兼容版本会使大多数Android设备不兼容。 - IgorGanapolsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接