【问题标题】:Searching ArrayList of Objects in Java [duplicate]在Java中搜索对象的ArrayList [重复]
【发布时间】:2016-01-07 22:09:06
【问题描述】:

我正在构建一个小型应用程序(为了好玩),以基本上跟踪 Java 应用程序中的员工和产品。我已经创建了数组列表和类,但是我在对它们进行排序和搜索时遇到了麻烦。这是我迄今为止尝试过的。

我正在尝试根据员工姓名搜索数组列表的对象

System.out.println("Enter name of employee to search: \n");
String name = keyboard.nextLine();
Iterator itr = employeeList.iterator();

while (itr.hasNext()) {
    Employee test = (Employee) itr.next();

    if (test.getFirstName() == name.toString()) {
    System.out.println(test.getEmpInfo());

    }
}  

我的困境是,如果我将 name.toString() 替换为引号中的名称,它可以工作,但如果我使用 keyboard.nextLine() 它将不起作用,任何帮助将不胜感激!

【问题讨论】:

    标签: java search arraylist iterator


    【解决方案1】:

    这是java初学者最常见的问题。 使用equals() 方法而不是== 来比较Strings 和java。 所以修改你的代码如下。

    if (test.getFirstName().equals(name.toString())) {
         //your code
    }
    

    注意: == 用于比较二进制相等性,即比较对象的内存位置。但是.equals()是可以覆盖的,它会根据指定的逻辑比较对象的值。

    【讨论】:

    • 谢谢!我这样做了,它奏效了……有没有更有效的方法? ' if (test.getFirstName().equals(name.toString())) { System.out.println(test.getEmpInfo()); }'
    • 是的,这是您唯一可以使用的方法。如果名称是字符串值,有时您可能不需要name.toString()
    • 没错,在这种情况下没有可能是字符串的情况,但我一直在努力确保我处理所有可能的错误并做最佳实践,但你提出了一个很好的观点......谢谢寻求帮助!
    • @TylerH 您可以使用foreach,这通常比使用ArrayLists 时的whilefor 快。您还可以使用流过滤器,这应该是最有效的方法:employeeList.stream().filter(anEmployee -> anEmployee.getFirstName().equals(name)).forEach(anEmployee -> System.out.println(anEmployee.getEmpInfo())); 我在 pastebin 上写了一个小示例:pastebin.com/qhLS5Y1B
    猜你喜欢
    • 2013-11-08
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多