如何借助枚举过滤StorageManager中名为items的LinkedList列表元素
实现方案
默认实现逻辑为筛选出所有包含指定过敏原枚举值的Item,存入新的LinkedList返回,如果需要筛选不包含指定过敏原的条目,只需把判断条件取反即可。
首先确保你的Allergen枚举定义如下:
public enum Allergen { NUTS,PEANUTS,SOYBEANS,GLUTEN,FISH,MILK,EGGS; }
过滤方法实现
直接替换你StorageManager类中未完成的filterStorage方法即可,所有依赖都在你允许的导入包范围内:
// 传入目标过敏原枚举值,返回所有符合条件的Item列表 public LinkedList<Item> filterStorage(Allergen targetAllergen){ // 初始化存储结果的新列表 LinkedList<Item> filteredItems = new LinkedList<>(); // 遍历所有存储的Item for (Item item : this.items) { // 判断当前Item的过敏原列表是否包含目标过敏原 if (item.getAllergenes().contains(targetAllergen)) { filteredItems.add(item); } } return filteredItems; }
调用示例
// 示例:过滤出所有含麸质(GLUTEN)的商品 StorageManager storageManager = new StorageManager(); // 省略storageManager的初始化、商品添加逻辑 LinkedList<Item> glutenContainItems = storageManager.filterStorage(Allergen.GLUTEN);
可选:buyNewItem方法逻辑修正
你当前的buyNewItem逻辑是「列表中存在相同商品才添加,不存在就提示已在购物车」,逻辑是反的,如果你的需求是不存在相同商品才允许添加,可以调整为:
public boolean buyNewItem(Item item) { boolean isExist = false; for (Item item1 : items) { if(item1.equals(item)) { isExist = true; break; } } if(!isExist) { this.items.add(item); return true; } else { System.out.println("Ist bereits im Warenkorb"); return false; } }
内容的提问来源于stack exchange,提问作者user17543363
相关产品推荐
相关产品推荐

