我了解如何收集到List
,但不知道
我将如何仅将过滤对象的一个参数作为String
返回。
fee = new BigDecimal(fees
.stream()
.filter(p -> p.getTodate().isAfter(LocalDateTime.now()))
.filter(p -> p.getFromdate().isBefore(LocalDateTime.now()))
.filter(p -> p.getId().equals(id))
return fee;
我首先检查费用是否是最新的,因为可能会有即将到来的费用和不再有效的费用。然后,我将ID与剩余费用进行匹配。 但是在最后一个过滤器和返回之间缺少代码。
我只想为String
构造函数从Stream
对象(p.getFee)返回BigDecimal
。
我知道过滤器之后仅剩下一个Stream
对象。
答案 0 :(得分:13)
使用findFirst
返回Stream
中通过过滤器的第一个元素。它返回一个Optional
,因此如果orElse()
为空,则可以使用Stream
设置默认值。
fee = new BigDecimal(fees
.stream()
.filter(p -> p.getTodate().isAfter(LocalDateTime.now()))
.filter(p -> p.getFromdate().isBefore(LocalDateTime.now()))
.filter(p -> p.getId().equals(id))
.map(p -> p.getFee())
.findFirst()
.orElse(/*some default value*/));
答案 1 :(得分:1)
也许是更好的方法:
fee = fees.stream()
.filter(p -> p.getTodate().isAfter(LocalDateTime.now()))
.filter(p -> p.getFromdate().isBefore(LocalDateTime.now()))
.filter(p -> p.getId().equals(id))
.map(p -> p.getFee())
.findFirst()
.map(BigDecimal::new)
.orElse(/*some default value*/);