有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在没有特定属性的对象中访问模型的值

我可以使用“getTotalItemPrice”方法获得购物车中的所有物品,如下面所示

然而,我不确定这是否是一个好的方式或不采取获得总价格

我知道我可以设置在创建对象时已计算的总值。但是用一种方法得到一个总值对我来说很容易

请与我分享你的建议

public class CartModel {
    private List<ItemModel> items;

    public List<ItemModel> getItems() {
        return items;
    }

    public void setItems(List<ItemModel> items) {
        this.items = items;
    }

    public double getTotalItemPrice() {
        double totalPrice = 0.0;
        if (items != null && items.isEmpty()) {
            for (ItemModel item : items) {
                totalPrice += item.getPrice();
            }
        }
        return totalPrice;

    }
}



public class ItemModel {
    private String item;
    private double price;
    private String currency;

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public String getCurrency() {
        return currency;
    }

    public void setCurrency(String currency) {
        this.currency = currency;
    }

    public String getItem() {
        return item;
    }

    public void setItem(String item) {
        this.item = item;
    }
}

共 (2) 个答案

  1. # 1 楼答案

    你的方法更有意义。在需要时计算总数,而不是在构建对象时或每次项目更改时

  2. # 2 楼答案

    你可以做几件事:

    1. 你现在正在做的事情——在需要的时候计算总数。这在大多数情况下都很好

    2. 您可以做的另一件事是创建一个具有总值的字段,并在添加或删除项目时对其进行更新。这是一种缓存机制。但是,只有当遍历集合非常昂贵或者集合非常非常大时,这才有意义。在琐碎的情况下,这是不必要的


    顺便说一下,我建议永远不要将集合设置为null,始终对其进行初始化,即private List<ItemModel> items = new ArrayList<>()或类似的设置

    其次,您可以使用函数式编程按如下方式重写getTotalItemPrice方法:

    public double getTotalItemPrice() {
        return this.items.stream()
            .mapToDouble(item -> item.getPrice())
            .sum();
    }
    

    这将创建一个流来遍历items的每个元素。首先,项目被映射到它的价格,因此它被转换成一个具有double的流,然后我们应用一个缩减操作,对流的所有元素求和