我有一个对象列表,我在这个列表的每个元素上循环,我修改了几个属性。
这是我想转换为使用流 API 的代码。
for (Besoin besoin : besoins) {
String purchaseOrderPosition = besoin.getReferenceOa().trim();
if(purchaseOrderPosition != "") {
ValeursDynamiques valeursDynamiques = valeursDynamiquesService.DynamicValues(supplierNumber, purchaseOrderPosition);
besoin.setQuantityInTransit(valeursDynamiques.getUsedValues().getQteEnTransit());
besoin.setQuantityOrdered(valeursDynamiques.getUsedValues().getQteCommandee());
besoin.setQuantityDelivered(valeursDynamiques.getUsedValues().getQteRecue());
besoin.setDeliveryDateScheduled(valeursDynamiques.getUsedValues().getDateLivraisonPlanifiee());
besoin.setDeliverydateConfirmed(valeursDynamiques.getUsedValues().getDateLivraisonConfirmee());
besoin.setQuantityRestExpedited(valeursDynamiques.getUsedValues().getSoldeAExpedier());
}
}
最佳答案
这应该是正确的,因为您没有修改列表而是修改元素的属性:
besoins.stream().forEach(besoin -> {
String purchaseOrderPosition = besoin.getReferenceOa().trim();
if(!purchaseOrderPosition.isEmpty()) {
ValeursDynamiques valeursDynamiques = valeursDynamiquesService.DynamicValues(supplierNumber, purchaseOrderPosition);
besoin.setQuantityInTransit(valeursDynamiques.getUsedValues().getQteEnTransit());
besoin.setQuantityOrdered(valeursDynamiques.getUsedValues().getQteCommandee());
besoin.setQuantityDelivered(valeursDynamiques.getUsedValues().getQteRecue());
besoin.setDeliveryDateScheduled(valeursDynamiques.getUsedValues().getDateLivraisonPlanifiee());
besoin.setDeliverydateConfirmed(valeursDynamiques.getUsedValues().getDateLivraisonConfirmee());
besoin.setQuantityRestExpedited(valeursDynamiques.getUsedValues().getSoldeAExpedier());
}
}
你可以直接使用列表中的
forEach()
,我已经使用了 isEmpty()
的 != ""
。但如前所述,为什么在这里使用 Stream ?
besoins.stream().forEach(besoin ->
的可读性不如 for (Besoin besoin : besoins)
一般来说,当更喜欢流来过滤、映射和提取一些数据时