我想过滤signedOn字段为null的所有传输。当我运行第一段代码时,它清楚哪些是空的,哪些不是,并且它们被正确记录,但是当我运行流过滤器时,它返回一个空列表,我可以'似乎找到了它的问题...... signedOn是一个Date字段。
这样可以记录所有条目是否为null:
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());
}
答案 0 :(得分:2)
您可以在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
来记录内部流btw,但在你的情况下使用它需要测试两次null。
您也可以使用不同的收集器来获取null和非{(1}})的收集器:
filter
答案 1 :(得分:2)
似乎route.getTransferCollection()
已经是一个空列表。请尝试这样检查:
route.getTransferCollection()
.stream()
.forEach(System.out::println); // or .forEach(e -> logInfo(e));
并查看是否会打印任何内容。