java - Java 8 Streams在过滤映射后获取原始对象
问题描述
我必须获取未付款发票的收据 ID。订单有多个收据,收据有发票。我正在使用 Java 8 流。从收据流中,我只能获取发票列表,但我想获取未付款发票的收据 ID
这是我的代码:
List<Invoice> invoicesNotPaid = receipts.stream()
.map(ReceiptsVO::getInvoices)
.flatMap(List::stream)
.map(inv -> Invoice.builder().status(InvoiceStatus.getStatus(inv.getStatus().name())).build())
.filter(Invoice::hasNotBeenPaid).collect(Collectors.toList());
在最终过滤器之后,我只获得发票,我无法获得原始收据对象参考。在检查收据与未支付的发票后,我必须做一些类似下面的事情。
receipts -> receipt.getReceiptId()
如何获取未付款发票的收据 ID?
解决方案
不要使用 flatMap 丢弃数据,而是使用内部流进行过滤:
List<Invoice> invoicesNotPaid = receipts.stream()
.filter(receipt -> receipt.getInvoices().stream().anyMatch(inv -> !hasBeenPaid(inv))
.collect(Collectors.toList());
推荐阅读
- javascript - 如何在 App Scripts 中使用 jQuery 修复点击事件和两个自动完成功能?
- python - sqlalchemyjoinedload 不会将子链接回父。parent.childen[0].parent 未加载
- c - 空字符串是否应该等于 C 中的空终止符?
- algorithm - 我的 Strassen 实现比简单的矩阵乘法慢吗?
- keras - 如何为 Keras 嵌入层提供适当形状的输入?
- java - Spring Boot - “创建名为 'entityManagerFactory' 的 bean 时出错” - 开始
- javascript - 如何根据身份验证是否发生在 Angular 9 应用程序中来执行此重定向?
- angular - 在 Angular 组件之间通过服务共享地图/对象/数组中的数据的最佳实践是什么
- python - 将 Python 对象传递给 Reactjs
- c++ - 计数在堆和堆栈上创建的对象