You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,提问作者Владимир Мещеряков

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 21:27:03