具有equal的Java流,始终返回null
关于我最后一个问题的补充问题具有equal的Java流,始终返回null,java,java-stream,equals,Java,Java Stream,Equals,关于我最后一个问题的补充问题 BigDecimal fee; fee = fees.stream() .filter(p -> p.getTodate().isAfter(LocalDateTime.now())) .filter(p -> p.getFromdate().isBefore(LocalDateTime.now())) .filter(p -> p.getId().equal
BigDecimal fee;
fee = fees.stream()
.filter(p -> p.getTodate().isAfter(LocalDateTime.now()))
.filter(p -> p.getFromdate().isBefore(LocalDateTime.now()))
.filter(p -> p.getId().equals("001001"))
.map(Fee::getFee)
.findFirst()
.map(BigDecimal::new)
.orElse(new BigDecimal(1000));
return fee;
我首先检查费用是否是最新的,因为可能会有即将到来的费用和不再有效的费用。然后我尝试将id与剩余费用匹配
问题是最后一个过滤器。
我已经检查了多次,在数据中,正好有一个条目具有当前日期和相同的id。(它以前是输入的,但出于调试目的,我现在已经硬编码了它)
如果我去掉日期过滤器,它仍然只会返回bigdecimal1000
我在这里看不到什么
这两个值都是字符串
不是一个真正的答案,但我没时间了,做了完全相同的事情
使用常规的旧for循环,一切都按预期进行,工作正常
因此,我仍然不会继续使用流
编辑:
代码
也许getFee会返回一个空列表。您应该只使用过滤器来尝试结果,看看问题是否真的在过滤器行为上…@snap完成了,数据正在通过。您可以提供一个示例代码,以提供一个可运行的代码来处理您的问题。。。。45人阅读了你的帖子,没有人能回答,因为我们无法解决你的问题,除非测试它,以了解你的代码中到底发生了什么,导致它失败。该问题显然不直接出现在您的代码段中。这显然需要一个。请包含用于修复该问题的代码,以防将来有人遇到类似问题。
for(Fee fee : fees){
if(fee.getId.equals(id)){
if(fee.getFromdate().isBefore(LocalDateTime.now())){
if(fee.getTodate().isAfter(LocalDateTime.now())){
BigDecimal z = new BigDecimal(fee.getFundservicefee());
return z.movePointLeft(2);
}
}
}
}