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

新手上路,请多包涵

我在这里读过这篇 文章。但是我仍然无法在 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

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

原文由 unlimited101 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

[原始答案]

您不能在 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。

[更新aeracode 2020-07-24]

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

原文由 Robert Estivill 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

该功能也将在近期加入ProGuard,敬请期待。

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

原文由 T. Neidhart 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题