
本文介绍如何使用java stream api根据用户输入的最低和最高价格,从玩具集合中筛选出符合价格区间的玩具并输出到控制台。
本文介绍如何使用java stream api根据用户输入的最低和最高价格,从玩具集合中筛选出符合价格区间的玩具并输出到控制台。
在SearchMenu()方法中实现价格区间搜索功能,核心在于对ArrayList
以下是完整、健壮的SearchMenu()实现(已修正原代码中的拼写错误,如selecMenu→selectMenu,并补充空集合处理与用户提示):
private static void SearchMenu() {
System.out.println("? Search by price range");
// 检查是否有玩具数据
if (toys.isEmpty()) {
System.out.println("⚠️ No toys available. Please add at least one toy first.");
MainMenu();
return;
}
System.out.print("Enter the minimum price: ");
int minimumPrice = scanner.nextInt();
System.out.print("Enter the maximum price: ");
int maximumPrice = scanner.nextInt();
// 验证输入合理性
if (minimumPrice > maximumPrice) {
System.out.println("❌ Invalid range: minimum price cannot exceed maximum price.");
SearchMenu();
return;
}
// 使用Stream API进行过滤(推荐方式)
List<Toy> filtered = toys.stream()
.filter(toy -> toy.getCost() >= minimumPrice && toy.getCost() <= maximumPrice)
.collect(Collectors.toList());
// 输出结果
System.out.println("\n✅ Found " + filtered.size() + " toy(s) in range [$" + minimumPrice + " – $" + maximumPrice + "]:");
if (filtered.isEmpty()) {
System.out.println(" (No matching toys)");
} else {
filtered.forEach(System.out::println);
}
System.out.println(); // 空行分隔
MainMenu();
}? 关键说明与注意事项:
- ✅ 流式过滤逻辑清晰:filter(t -> t.getCost() >= min && t.getCost()
- ✅ 无需手动创建副本:直接对原始toys集合操作,避免冗余new ArrayList(toys);
- ⚠️ 必须导入Collectors:在Main类顶部添加 import java.util.stream.Collectors;;
- ⚠️ Toy.toString()需完善:当前实现中this.name未初始化(构造函数未赋值),会导致输出为null - Size: ..., Price: ...。建议在子类(如Car, Doll)构造中显式设置this.name,或在Toy基类构造器中增加name参数;
- ? 扩展建议:后续可结合Optional处理空输入、添加异常捕获(如InputMismatchException)、支持模糊搜索或多字段组合筛选。
通过以上实现,用户即可在菜单选项“4. Search toys”中流畅完成价格区间查询,获得结构清晰、格式统一的控制台输出结果。
立即学习“Java免费学习笔记(深入)”;


















