我有一個發票串列,每個發票都可以有一個ISSUED狀態或IsNotfied欄位,可以是false或兩者兼有。我想知道,有什么方法可以同時進行操作并且只在一個流中進行操作?
allInvoices.stream()
.filter(invoice -> invoice.getCurrentStatus().getStatus().equals(EInvoiceStatus.ISSUED))
.forEach(this::submitInvoiceForPayment);
allInvoices.stream()
.filter(invoice -> !invoice.getIsNotified())
.forEach(invoice -> sendInvoiceNotification(invoice.getInvoiceDocument(), invoice));
uj5u.com熱心網友回復:
唯一明顯的方法是:
allInvoices.stream()
.forEach(invoice -> {
if (invoice.getCurrentStatus().getStatus().equals(EInvoiceStatus.ISSUED)) {
submitInvoiceForPayment(invoice);
}
if (!invoice.getIsNotified()) {
sendInvoiceNotification(invoice.getInvoiceDocument(), invoice);
}
});
這基本上只是一個 for 回圈。
我會堅持使用它,或者使用 for 回圈。
uj5u.com熱心網友回復:
在這種情況下,函式式編程特性不會給您帶來任何好處,因為您的代碼需要通過副作用進行操作(如果有人通過使它們并行來修改這些流,這可能會導致意外行為),并且還因為這些副作用應該是由不同的條件觸發。
我建議堅持使用普通的for回圈:
for (Invoice invoice : allInvoices) {
if (!invoice.getIsNotified())
sendInvoiceNotification(invoice.getInvoiceDocument(), invoice);
if (isIssued(invoice))
submitInvoiceForPayment(invoice);
}
public static boolean isIssued(Invoice invoice) {
return invoice.getCurrentStatus().getStatus().equals(EInvoiceStatus.ISSUED);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/516177.html
標籤:爪哇java流
