问题 Android N中的Java 8 Stream API


根据 谷歌的介绍从Android N开始,Android API应该支持Java流。

但是,使用Android N预览SDK,我无法在我的项目中使用任何Stream API(使用Android N配置为最小,目标和构建SDK版本)。

java.util.stream 包装好像都缺少了 stream() 我试过的所有集合实现的方法。

SDK的当前预览版中是否还包含必要的类?


5539
2018-03-20 09:27


起源

stackoverflow.com/questions/36000997/android-n-java8-java-time  不支持Java 8的所有功能,有些功能仅在预览中受支持。 - Maheshwar Ligade
那么Android开发者博客帖子是不正确的?它明确指出“默认和静态方法,流和功能接口 - 现在也可用于N及以上”。 - lxgr
developer.android.com/intl/zh-cn/preview/j8-jack.html 这是根据开发人员文档。 - Maheshwar Ligade
流API不是Java 8语言功能(由新的Jack编译器实现,可用于早期的Android目标)。它将作为Android SDK中的一组接口和实现类提供。 - lxgr
请区分Java语言,字节码和库功能。例如,杰克(已经可以使用并且可以正常工作)以与旧版Dalvik向后兼容的方式编译Lambdas。 (相比之下,“真正的”JDK使用Java 7字节码功能实现它们 - invokedynamic - 和Java 8类 - LambdaMetafactory。)另一方面,Streams是一个即使在Android上的库功能,也只能用于N + 。 - lxgr


答案:


它还没有在当前预览中,但它已经合并到AOSP Git主机中。看这里 https://android.googlesource.com/platform/libcore/+/916b0af2ccdd1bdfc0283b1096b291c40997d05f

编辑:

只是为了避免可能的混淆:在2016年3月,当OP,Android N开发人员提出这个问题时 preview-1 是唯一公开可用的现在称为Android 7.0“Nougat”的版本。

preview-1 事实上,build不包括Java 8 Stream API,但是在开发人员之后不久(一个月后)就添加了它 preview-2 建立。

所以,Android 7.0 API级别为24  现在支持Java 8 Stream API。


13
2018-03-22 13:54



请更新您的答案 - Stream API包含在最新版本的Android 7.0 SDK Platform(API 24)中。 - Alex Lipov
@AlexLipov做到了。感谢您的提醒。 - Stefan Zobel