
本文介绍如何使用Java Stream API根据用户输入的最低和最高价格,从玩具集合中筛选出符合条件的对象并输出到控制台。核心在于filter()配合Lambda表达式实现高效、可读性强的价格区间过滤。
本文介绍如何使用java stream api根据用户输入的最低和最高价格,从玩具集合中符合条件的对象并输出到控制台。核心在于`filter()`配合lambda表达式实现高效、可读性强的价格区间过滤。
在开发玩具管理类应用时,常需支持按价格区间快速检索商品。基于您提供的Toy类与主菜单结构,我们可在SearchMenu()方法中补充完整的筛选逻辑,使用户输入最小价(min)与最大价(max)后,程序自动遍历toys列表,仅保留价格满足 min ≤ cost ≤ max 的玩具对象,并以易读格式打印至控制台。
✅ 正确实现价格范围筛选
请将原SearchMenu()方法中未完成的部分替换为以下完整代码:
private static void SearchMenu() {
System.out.println("Search by price -");
System.out.print("Enter the minimum price: ");
int minimumPrice = scanner.nextInt();
System.out.print("Enter the maximum price: ");
int maximumPrice = scanner.nextInt();
// 使用 Stream 进行过滤:保留价格在 [minimumPrice, maximumPrice] 区间内的玩具
List<Toy> filtered = toys.stream()
.filter(t -> t.getCost() >= minimumPrice && t.getCost() <= maximumPrice)
.collect(Collectors.toList());
// 输出结果
if (filtered.isEmpty()) {
System.out.println("No toys found in the specified price range.");
} else {
System.out.println("\nMatching toys:");
filtered.forEach(System.out::println);
}
// 返回主菜单
System.out.println("\nPress any key to return to Main Menu...");
scanner.nextLine(); // 消费换行符
scanner.nextLine();
MainMenu();
}? 注意:需在Main类顶部添加导入语句:
import java.util.stream.Collectors;
⚠️ 关键注意事项
- 边界包含性:上述条件 t.getCost() >= min && t.getCost() <= max 为闭区间筛选(含端点),符合常规业务需求;
- 空结果处理:添加了isEmpty()判断,避免输出空列表时界面显得突兀;
- 输入兼容性:确保用户输入的min ≤ max;如需增强健壮性,可加入校验逻辑(例如:若min > max则自动交换或提示重输);
- toString()优化建议:当前Toy.toString()中引用了未初始化的this.name字段(其为protected且无默认值),可能导致输出含null。建议在子类(如Car、Doll)构造器中显式设置this.name = "Car"等,或在Toy基类中初始化为"",并在toString()中改用Objects.toString(name, "Unknown")防止NPE。
? 总结
利用 Java 8+ 的 Stream API 实现价格区间过滤,代码简洁、语义清晰、易于维护。相比传统for循环+if判断,它更符合函数式编程思想,也便于后续扩展(如叠加多条件过滤、分页、排序等)。只要确保toys列表已正确填充数据,该筛选功能即可即刻生效,成为玩具管理系统中实用且专业的搜索模块。
立即学习“Java免费学习笔记(深入)”;


















