unl*_*101 80 java android java-8 java-stream
我在这里看过这篇文章.但我仍然无法在minSdkVersion <24上运行包含Java 8 Stream API功能的代码,如下所示.
List<Car> newCars = cars.stream()
.filter(s -> s.getColor().equals("red"))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
由于错误消息,这不会运行
调用需要API级别24(当前最小值为15):java.util.Collection #stream
那么有人知道解决方案吗?
Rob*_*ill 55
您不能在API级别<24上使用Java8流.
但是,有一些库反向移植了一些流功能
https://github.com/aNNiMON/Lightweight-Stream-API
https://github.com/konmik/solid
https://sourceforge.net/projects/streamsupport/(@sartorius在评论中提到)
T. *_*art 12
从DexGuard 8.2版本开始,也可以在Android设备<API级别24上使用Java 8流API.为此,需要包含streamsupport库,DexGuard将所有Java 8流API调用转换为提供的图书馆.无需额外处理,开发人员可以使用提供的Java 8流API进行简单编码.依赖关系也会自动转换,因此可以将具有Java 8功能的库用于Android开发.
此功能也将在不久的将来包含在ProGuard中,敬请关注.
编辑:已存在测试版的Proguard 6.1.0支持向后移植Java 8流和时间API.
是的,是!从 AGP 4.0.0 开始,我们可以使用 Stream API 和其他一些 Java 8+ API(例如java.time)
对您的应用的build.gradle 进行最少的更改:
android {
compileOptions {
// Flag to enable support for the new language APIs
coreLibraryDesugaringEnabled true
}
}
dependencies {
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.9'
}
Run Code Online (Sandbox Code Playgroud)
参加聚会可能有点晚了,但我刚刚看到如果我们使用,java8.util.stream.StreamSupport那么我们可以运行相同的函数式编程方法并在 Api 24 之前使用它。例如取自 web3j -
StreamSupport.stream(transactionReceipt.getLogs())
.map(log -> extractEventParameters(event, log))
.filter(Objects::nonNull)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29451 次 |
| 最近记录: |