gpt4 book ai didi

java - 使用 gradle-retrolambda 和 Lightweight-Stream-API 在 Android 中过滤对象列表

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:36:28 31 4
gpt4 key购买 nike

我正在尝试在我的 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但这是一个不同的错误。
谢谢

最佳答案

我只能给你一个streamsupport的例子

import java.util.Arrays;
import java.util.List;

import java8.util.stream.Collectors;
import java8.util.stream.StreamSupport;
import static java.lang.Boolean.TRUE;
import static java.lang.Boolean.FALSE;

public class CaseDetails {

Boolean caseClosed = FALSE;

public CaseDetails(Boolean caseClosed) {
this.caseClosed = caseClosed;
}

public String toString() {
return "caseClosed: " + caseClosed;
}

public static void main(String[] args) {
List<CaseDetails> caseDetailsList = Arrays.asList(
new CaseDetails(TRUE), new CaseDetails(FALSE), new CaseDetails(
TRUE));
List<CaseDetails> closedCaseDetailsList = StreamSupport
.stream(caseDetailsList)
.filter(item -> item.caseClosed.equals(TRUE))
.collect(Collectors.toList());

System.out.println(closedCaseDetailsList);
}
}

希望这对您有所帮助。

关于java - 使用 gradle-retrolambda 和 Lightweight-Stream-API 在 Android 中过滤对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40886730/

31 4 0