是否可以在 Android API < 24 上使用 Java 8 Stream API?

2022-08-31 10:40:20

我在这里阅读了这篇文章。但是我仍然无法在minSdkVersion < 24上运行包含Java 8 Stream API功能的代码,如下所示。

List<Car> newCars = cars.stream()
                        .filter(s -> s.getColor().equals("red"))
                        .collect(Collectors.toList());

由于错误消息,这不会运行

调用需要 API 级别 24(当前最小值为 15):java.util.Collection#stream

那么有人知道解决方案吗?


答案 1

[原始答案]

您不能在 API 级别< 24 上使用 Java8 流。

但是,有一些库向后移植了某些流功能

https://github.com/aNNiMON/Lightweight-Stream-API

https://github.com/konmik/solid

https://sourceforge.net/projects/streamsupport/(@sartorius在评论中提到)

[更新 k3b 2019-05-23]

https://github.com/retrostreams/android-retrostreams 是streamsupport的衍生产品,它利用Android Studio 3.x D8 / desugar工具链的功能,跨Jar文件边界使用接口默认和静态方法。还有指向其他android-retroXXX的链接,即CompletableFuture。

[更新邮政编码2020-07-24]

好消息是,现在我们可以使用Java 8 Stream API等,而不需要最低API级别


答案 2

DexGuard的8.2版本以来,也可以在Android设备上使用Java 8 streams API,<API级别24。为此,需要包含streamsupport库,DexGuard会将所有Java 8流API调用转换为提供的库。无需额外的处理,开发人员只需使用提供的 Java 8 流 API 编写代码即可。依赖项也是自动转换的,因此也可以使用具有Java 8功能的库进行Android开发。

此功能也将在不久的将来包含在 ProGuard 中,敬请期待。

编辑:已经存在测试版的Proguard 6.1.0支持向后移植Java 8流和时间API。


推荐