gpt4 book ai didi

java-8 - Java 8 Stream Filter总是返回一个空列表

转载 作者:行者123 更新时间:2023-12-01 00:22:10 28 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





stream on JPA lazy list

(2 个回答)


3年前关闭。




我想过滤signedOn 字段为空的所有传输。当我运行第一段代码时,很清楚哪些是空的,哪些不是,并且它们被正确记录,但是当我运行流过滤器时,它返回一个空列表,我似乎无法找到问题所在它... signedOn 是一个日期字段。

这有效并记录所有条目是否为空:

    for (Transfer transfer : route.getTransferCollection()) {
if (transfer.getSignedOn() == null) {
logInfo("This transfer is null");
} else if (transfer.getSignedOn() != null) {
logInfo("This transfer is not null");
}
}

这将返回一个空列表:
    return route.getTransferCollection()
.stream()
.filter(transfer -> transfer.getSignedOn() == null)
.collect(Collectors.toList());
}

最佳答案

您可以在 filter 中记录您的声明本身

 return route.getTransferCollection()
.stream()
.filter(transfer -> {
boolean test = transfer.getSignedOn() == null;
if(test){
// log wathever
} else {
// log diff
}
return test
})
.collect(Collectors.toList());

您可以使用 peek顺便说一句,在流中登录,但在您的情况下使用它需要对 null 进行两次测试。

您还可以使用不同的收集器来获取空值和非空值的收集器(没有 filter ):
.collect(Collectors.partitioningBy(transfer -> transfer.getSignedOn() == null))

关于java-8 - Java 8 Stream Filter总是返回一个空列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47741354/

28 4 0