You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

POST请求中如何将枚举值与Burger类价格字段求和

汉堡配料价格累加问题解决

问题场景

我定义了一个带Double类型值的Ingredients枚举:

@Getter
@AllArgsConstructor
public enum Ingredients {
    LETUCE(0.40),
    BACON(2.00),
    BEEF(3.00),
    EGG(0.80),
    CHEESE(1.50);
}

同时有一个Burger类,包含以下字段:

Long id;
String name;
Double price;
List<Ingredients> aditionalIngredients;

需求是在JSON POST请求中,将Burger对象的aditionalIngredients列表中指定配料的枚举值,累加到默认price字段上。例如请求:

{
  "name" : "Burger1",
  "price" : 5.00,
  "aditionalIngredients": ["LETUCE", "EGG"] //将这两个值加到汉堡默认价格
}

预期返回:

{
  "name" : "Burger1",
  "aditionalIngredients": ["LETUCE", "EGG"],
  "price" : 6.20         //0.40 + 0.80 + 5.00(汉堡价格)
}

尝试了以下代码:

if(!burger.getAditionalIngredient().isEmpty()){
         for( Ingredients a : Ingredients.values()){
         burger.setPrice(burger.getPrice() +  a.getValue());
   }
}

但结果是所有枚举值的总和,而非仅指定配料的数值之和,需要正确实现方式。

正确实现方式

问题核心是遍历了所有枚举值,而非当前汉堡的aditionalIngredients列表,只需要调整循环对象即可:

基础循环实现

// 先校验配料列表不为null且非空
if (burger.getAditionalIngredients() != null && !burger.getAditionalIngredients().isEmpty()) {
    for (Ingredients ingredient : burger.getAditionalIngredients()) {
        burger.setPrice(burger.getPrice() + ingredient.getValue());
    }
}

Java 8+ Stream简洁实现

如果偏好函数式风格,可用Stream完成累加:

if (burger.getAditionalIngredients() != null && !burger.getAditionalIngredients().isEmpty()) {
    double additionTotal = burger.getAditionalIngredients()
            .stream()
            .mapToDouble(Ingredients::getValue)
            .sum();
    burger.setPrice(burger.getPrice() + additionTotal);
}

额外建议

  • 必须先判断aditionalIngredients是否为null,避免空指针异常
  • 若需避免Double浮点精度问题,建议改用BigDecimal存储价格和配料值

内容的提问来源于stack exchange,提问作者Luigicuri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 19:20:53