Java新手求助:POS系统中从Item列表取值及重量校验异常处理
嘿,作为Java新手能搭建到这一步已经超棒啦!我来帮你搞定这两个问题👇
一、实现
isWeightReqd相关的异常处理逻辑 首先,咱们得先明确你的Item类里应该有对应数据库的weightRequired属性(用来标记是否需要重量),还有存储重量的字段。然后isWeightReqd其实就是判断这个属性的状态,核心是在用户录入时,当该属性为true但未提供有效重量时抛出异常。
第一步:完善Item类的核心属性
先确保你的Item类包含这些关键属性和getter/setter:
public class Item { private String itemId; private String itemName; private boolean weightRequired; // 对应数据库的weight required=true/false private double weight; // 存储商品重量,仅当weightRequired为true时需要 // 已有的其他属性和getter/setter... public boolean isWeightRequired() { // 就是你说的isWeightReqd方法,Java规范里布尔类型用is开头 return weightRequired; } public void setWeightRequired(boolean weightRequired) { this.weightRequired = weightRequired; } public double getWeight() { return weight; } public void setWeight(double weight) { this.weight = weight; } }
第二步:自定义异常+校验方法
咱们可以写一个专门的异常类来处理重量缺失的情况,再写一个校验方法来触发异常:
// 自定义异常,专门用于提示重量未录入的错误 public class MissingWeightException extends Exception { public MissingWeightException(String message) { super(message); } } // 校验商品重量的方法,放在你的业务处理类里(比如POSService) public void checkWeightRequirement(Item item) throws MissingWeightException { // 调用isWeightRequired判断是否需要重量 if (item.isWeightRequired()) { // 这里判断重量是否有效(比如<=0视为未录入) if (item.getWeight() <= 0) { throw new MissingWeightException("商品【" + item.getItemName() + "】需要录入重量,请重新填写!"); } } }
第三步:在录入流程中调用校验
当用户录入完商品、设置好Item的属性后,用try-catch包裹校验逻辑,捕获异常并提示用户:
// 假设你已经通过setters把用户录入的信息封装成了newItem对象 List<Item> itemList = new ArrayList<>(); // 你的Item集合 try { checkWeightRequirement(newItem); // 校验通过,加入集合 itemList.add(newItem); System.out.println("商品录入成功!"); } catch (MissingWeightException e) { // 异常处理:给用户提示错误,比如控制台输出或者界面弹窗 System.err.println(e.getMessage()); // 这里可以添加逻辑让用户重新录入该商品的重量 }
二、从List- 中提取特定/孤立值
这里分几种常见场景,用Java 8+的Stream API会更简洁,当然也给你传统循环的写法作为参考:
场景1:提取单个符合条件的商品(比如根据itemId找商品)
// 方法1:传统for循环 Item targetItem = null; for (Item item : itemList) { if ("SP001".equals(item.getItemId())) { // 替换成你要找的itemId targetItem = item; break; // 找到就退出循环,提高效率 } } if (targetItem != null) { // 提取你需要的值,比如商品名称、价格 String name = targetItem.getItemName(); System.out.println("找到目标商品:" + name); } else { System.out.println("未找到对应商品"); } // 方法2:Stream API(更简洁,推荐) Optional<Item> optionalItem = itemList.stream() .filter(item -> "SP001".equals(item.getItemId())) .findFirst(); // 用Optional避免空指针 optionalItem.ifPresent(item -> { String name = item.getItemName(); System.out.println("找到目标商品:" + name); });
场景2:提取所有符合条件的商品(比如所有需要重量的商品)
// 用Stream提取所有weightRequired=true的商品 List<Item> weightNeededItems = itemList.stream() .filter(Item::isWeightRequired) // 方法引用,等价于item -> item.isWeightRequired() .collect(Collectors.toList()); // 遍历提取到的列表,获取每个商品的信息 weightNeededItems.forEach(item -> { System.out.println("需要重量的商品:ID=" + item.getItemId() + ",名称=" + item.getItemName()); });
场景3:提取单个属性的集合(比如所有商品的名称)
如果你只需要某个属性的值,比如所有商品的名称,可以直接提取成单独的集合:
List<String> allItemNames = itemList.stream() .map(Item::getItemName) // 提取商品名称属性 .collect(Collectors.toList()); // 输出所有名称 allItemNames.forEach(System.out::println);
内容的提问来源于stack exchange,提问作者breadfan18
相关产品推荐
相关产品推荐

