Как искать в ArrayList имя сотрудника (ищется только по фамилии) - PullRequest
0 голосов
/ 29 апреля 2020

Если вам дан файл данных, который содержит имена и фамилии сотрудников и их зарплаты, как создать список массивов этих данных? Кроме того, как создать метод, который ищет в ArrayList имя сотрудника (имя LAST, введенное пользователем), и другой метод для поиска в ArrayList всех сотрудников, которые за неделю получают больше суммы, введенной пользователем ??

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020

Предполагая, что файл выглядит следующим образом:

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

Я бы создал некую структуру данных для хранения каждой строки данных, как объект класса Employee

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

Тогда вы читаете каждую строку данных и сохраняете содержимое в объекте и добавляете его в свой 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. Теперь для поиска в вашем массиве, это зависит от того, насколько эффективным вы хотите, чтобы ваш алгоритм был. Вы можете выполнить простой линейный поиск, который называется O (n), итерируя по каждому объекту в списке массивов. Для l oop это можно сделать следующим образом:

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;

Надеюсь, это поможет!

0 голосов
/ 29 апреля 2020

Полагаю, вы получите файл в каком-то конкретном формате c, например, csv. Если вы этого не сделаете, это в принципе невозможно. Вам нужно что-нибудь для разделения данных.

Я бы создал класс, содержащий имя, фамилию и зарплату. Если имя не имеет никакого значения для вас, вы можете также сохранить его в HashMap, это упростит поиск, но вы получите проблемы, если какая-то фамилия будет там дважды, поскольку одна будет перезаписана.

  1. Создание класса с обязательными полями
  2. Создание ArrayList
  3. Чтение файла, создание объекта для каждой записи в файле и добавление этого объекта в массив

Поиск фамилии: L oop по списку с foreach l oop и сравнение фамилии со строкой поиска. Если это соответствует -> сделать все, что вам нужно, например System.out.printLine.

Поиск зарплаты: L oop по списку с foreach l oop и проверить, является ли зарплата текущей объект> = ваша справочная зарплата. Затем распечатайте его или добавьте в другой массив при необходимости

Вы также можете проверить это, если хотите использовать функцию filter () в Java 8, но она создаст поток в процессе. https://mkyong.com/java8/java-8-streams-filter-examples/

Подход, который вы используете, в основном зависит от размера файла. Если вы говорите о многих записях в файле, тогда лучше подходить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...