Java8流过滤映射后获取原始对象
我必须获得未付款发票的收据id。订单有多张收据,收据有发票。我正在使用Java8流。从收据流中,我只能获取发票列表,但我想获取未付款发票的收据id 这是我的密码:Java8流过滤映射后获取原始对象,java,java-8,java-stream,Java,Java 8,Java Stream,我必须获得未付款发票的收据id。订单有多张收据,收据有发票。我正在使用Java8流。从收据流中,我只能获取发票列表,但我想获取未付款发票的收据id 这是我的密码: List<Invoice> invoicesNotPaid = receipts.stream() .map(ReceiptsVO::getInvoices) .flatMap(List::stream) .map(inv -> Invoice.
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());
如何获取未付款发票的收据Id?与其使用flatMap丢弃数据,不如使用内部流进行筛选:
List<Invoice> invoicesNotPaid = receipts.stream()
.filter(receipt -> receipt.getInvoices().stream().anyMatch(inv -> !hasBeenPaid(inv))
.collect(Collectors.toList());
List invoicesNotPaid=receipts.stream()
.filter(收据->收据.getInvoices().stream().anyMatch(inv->!hasBeenPaid(inv))
.collect(Collectors.toList());
您可以流式处理收据
,然后检查收据中至少一个发票
未付款,然后收集这些收据id
List<Integer> receiptIdNotPaid = receipts.stream()
.filter(receipt-> receipt.getInvoices().stream()
.map(inv->Invoice.builder().status(InvoiceStatus.getStatus(inv.getStatus().name())).build())
.anyMatch(Invoice::hasNotBeenPaid))
.map(Receipt::getReceiptId)
.collect(Collectors.toList());
List receiptIdNotPaid=receipts.stream()
.filter(收据->收据.getInvoices().stream())
.map(inv->Invoice.builder().status(InvoiceStatus.getStatus(inv.getStatus().name())).build())
.anyMatch(发票::hasNotBeenPaid))
.map(收据::getReceiptId)
.collect(Collectors.toList());
在receipt类中放入一个布尔方法,该方法将准确地提供该信息。然后,您可以简单地对该谓词进行筛选。为什么要使用生成器将inv映射到新发票?感谢大家的快速响应。这对我很有效。正是我所寻找的。
List<Integer> receiptIdNotPaid = receipts.stream()
.filter(receipt-> receipt.getInvoices().stream()
.map(inv->Invoice.builder().status(InvoiceStatus.getStatus(inv.getStatus().name())).build())
.anyMatch(Invoice::hasNotBeenPaid))
.map(Receipt::getReceiptId)
.collect(Collectors.toList());