Java中如何通过Scanner输入的名称查询List内存储的类对象
实现方案
前提准备
首先确保你存储在List中的自定义类提供name字段的公共Getter方法,符合Java封装规范,示例类定义如下:
public class CustomClass { // 自定义类的name字段 private String name; // 构造方法、其他字段及逻辑省略 // 必须提供name字段的Getter,用于外部获取属性值 public String getName() { return name; } }
同时你的List需要声明为泛型类型,避免类型强转问题:List<CustomClass> list = new ArrayList<>();
代码修正实现
你原有代码的循环边界存在问题:i<list.size()-1会漏掉List的最后一个元素,修正后有两种常用实现方式:
方式1:普通for循环(需要获取索引时使用)
public static void searchClassInList() { Scanner scanner = new Scanner(System.in); System.out.println("Enter value for search: "); String nameValue = scanner.nextLine(); // 修正循环边界,覆盖所有元素 for(int i=0; i<list.size(); i++) { CustomClass currentObj = list.get(i); // 字符串比对用equals,把输入值放前面避免空指针 if(nameValue.equals(currentObj.getName())) { System.out.println("匹配成功,对象索引为:" + i); // 此处补充匹配到后的业务逻辑,返回对象/输出属性都可 return; // 仅查第一个匹配项时加return,要查所有匹配项可删除 } } System.out.println("未找到名称为 " + nameValue + " 的对应对象"); }
方式2:增强for循环(不需要索引时更简洁)
public static void searchClassInList() { Scanner scanner = new Scanner(System.in); System.out.println("Enter value for search: "); String nameValue = scanner.nextLine(); for(CustomClass currentObj : list) { if(nameValue.equals(currentObj.getName())) { System.out.println("匹配成功,对象信息:" + currentObj); // 补充匹配后的业务逻辑 return; } } System.out.println("未找到匹配对象"); }
注意事项
- 字符串比对必须用
equals()方法,不要用==:==比对的是字符串内存地址,仅对常量池内的字符串生效,用户输入的动态字符串用==会出现比对错误。 - 如果允许
name字段为null,需要额外加空值判断,避免调用getName()时触发空指针异常。 - 如果需要查询所有符合条件的对象,删除匹配后的
return语句,用集合存储所有匹配对象最后统一处理即可。
内容的提问来源于stack exchange,提问作者Владимир Мещеряков
相关产品推荐
相关产品推荐

