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
相关产品推荐
相关产品推荐

