bri*_*nts 5 java-8 java-stream
我想过滤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");
}
}
Run Code Online (Sandbox Code Playgroud)
这将返回一个空列表:
return route.getTransferCollection()
.stream()
.filter(transfer -> transfer.getSignedOn() == null)
.collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)
filter您可以在其内部记录您的语句
return route.getTransferCollection()
.stream()
.filter(transfer -> {
boolean test = transfer.getSignedOn() == null;
if(test){
// log wathever
} else {
// log diff
}
return test
})
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
顺便说一句,您可以使用它peek来记录流内部,但在您的情况下使用它需要对 null 进行两次测试。
您还可以使用不同的收集器来获取 null 和非 null 的收集器(不带filter):
.collect(Collectors.partitioningBy(transfer -> transfer.getSignedOn() == null))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11374 次 |
| 最近记录: |