我有一个对象列表,我在这个列表的每个元素上循环,我修改了几个属性。

这是我想转换为使用流 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)
一般来说,当更喜欢流来过滤、映射和提取一些数据时

10-08 14:31