繁体   English   中英

如何在 ArrayList 中搜索员工姓名(仅搜索姓氏)

[英]How to search the ArrayList for a Employee name (searched only for last name )

如果给你一个数据文件,其中包含员工的名字和姓氏,以及他们的薪水,如何创建该数据的数组列表? 此外,如何创建一个方法来搜索 ArrayList 中的员工姓名(用户输入的姓氏)以及另一种方法来搜索 ArrayList 中的所有员工每周收入超过用户输入的金额?

我想您以某种特定格式获取文件,例如 csv。 如果你不这样做,那基本上是不可能的。 您需要任何东西来分离数据。

我会创建一个包含名字、姓氏和薪水的 class。 如果名字对您来说根本不重要,您也可以将其存储在 HashMap 中,这将使搜索变得容易,但如果某个姓氏出现两次,您会遇到问题,因为其中一个会被覆盖。

  1. 使用必填字段创建 class
  2. 创建 ArrayList
  3. 读取文件,为文件中的每个条目创建一个 object 并将此 object 添加到数组

搜索姓氏:使用 foreach 循环遍历列表并将姓氏与搜索字符串进行比较。 如果它匹配 -> 做任何你需要的,例如 System.out.printLine。

搜索薪水:用foreach循环遍历列表,检查当前object的薪水是否>=您的参考薪水。 如果需要,然后将其打印或添加到另一个数组

如果你想在 Java 8 中使用 filter() function,你也可以检查这个,但它会在这个过程中创建一个 stream。 https://mkyong.com/java8/java-8-streams-filter-examples/

您使用的方法基本上取决于文件的大小。 如果您在谈论文件中的许多记录,那么有更好的方法

假设文件如下所示:

First Last Salary
----- ---- -----
John  Doe   78
Brad  Snow  98
Bill  Rosnow 101

我会制作某种数据结构来保存每一行数据,例如 Employee class object

public class Employee {
    private String First;
    private String Last;
    private double salary;
    // constructor, setters, getters down below
}

然后您将读取每一行数据并将内容存储到 object 中,并将其添加到您的 ArrayList

ArrayList<Employee> dataArray = new ArrayList<Employee>();
// pseudo code here
while(Not End of File) {
    // Parse file line contents and separate into local variables
    Employee dataLine = new Employee(firstNameFromFile, LastNameFromFile, salaryFromFile);
    dataArray.add(dataLine);
}

这就是我将文件中的数据存储到 ArrayList 的方式。 现在要搜索您的数组,这取决于您希望算法的效率。 您可以通过遍历数组列表中的每个 object 来进行简单的线性搜索,即 O(n)。 可以通过以下 for 循环来做到这一点:

for(Employee employee : dataArray) {
    if(employee.getLastName() == searchingName) return employee; 
}

现在可以为指定的薪水做同样的事情,但是您可以将找到的 Employee 对象存储到另一个 ArrayList 中; 这样你就可以拥有工资高于指定金额的所有员工:

ArrayList<Employee> employeesFound = new ArrayList<Employee>();
for(Employee employee : dataArray) { // Don't forget that dataArray holds all the Employee objects
    if(employee.getSalary() > userSpecifiedSalary) employeesFound.add(employee); 
}
return employeesFound;

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM