【发布时间】:2023-03-19 16:15:01
【问题描述】:
我正在尝试在我的 Android 应用程序中过滤 Java 中的对象列表,为此我遵循 this answer(Java 8 建议),但由于 Android SDK 不支持 Lambda,我使用了 gradle-retrolambda 但我得到这个运行时错误java.lang.NoSuchMethodError: No interface method stream()Ljava/util/stream/Stream; in class Ljava/util/List; or its super classes (declaration of 'java.util.List' appears in /system/framework/core-libart.jar)
这是我正在使用的代码行:
List<CaseDetails> closedCaseDetailsList = caseDetailsList.stream().filter(item -> item.caseClosed.equals(true)).collect(Collectors.toList());
我相信它应该可以工作,因为 gradle-retrolambda 应该负责 Java7 上的 Lambda。
接下来,我尝试了 Lightweight-Stream-API 和 gradle-retrolambda 并根据 Lightweight-Stream-API 的用法稍微更改了我的代码
List<CaseDetails> closedCaseDetailsList = Stream.of(caseDetailsList).filter(item -> item.caseClosed.equals(true)).collect(Collectors.toList());
但它给了我一个错误,而不是Collectors.toList() 说
collect
(com.annimon.stream.Collector<? super com.example.yankee.cw.CaseDetails,java.lang.Object,java.lang.Object>)
in Stream cannot be applied
to
(java.util.stream.Collector<T,capture<?>,java.util.List<T>>)
我还尝试将Stream 显式类型转换为List<CaseDetails>,但这没有用(当然)。
我尝试了 Slack 社区、SO 聊天室,但找不到解决方案。我发现最接近我的问题的是question,但这是一个不同的错误。
谢谢
【问题讨论】:
标签: java android lambda java-8