Как перебрать ArrayList внутри пользовательского объекта? - PullRequest
0 голосов
/ 25 сентября 2019

Я понимаю, что варианты этого вопроса уже задавались ранее, но мне непросто понять, как выполнить следующую задачу:

У меня есть объект, который выглядит примерно так (обратите внимание,, "Навык" и "Сертификация": ENUMS ):

Public Employee {

String name;
List<Skill> employableSkills = new ArrayList<>();
List<Certification> certifications = new ArrayList<>(); 
   ...
}

В другом классе у меня есть

List<Employee> listOfEmployees;

, и я пытаюсьперебрать его так:

// determine the total number of employees who know Java

int numberOfEmployeesWhoKnowJava = 0;

for (Employee employee : listOfEmployees) {
    if (employee.employableSkills.contains( ?? )) {

numberOfEmployeesWhoKnowJava++;
}

Я пытаюсь получить точный синтаксис в операторе if.Я пробовал это:

if(employee.employableSkills.contains(Employee.EmployableSkills.JAVA)) {

, но EmployableSkills в этой строке получает «не может разрешить символ».

Как я должен пройти по списку для каждого объекта Employee и проверить, содержит ли он JAVA?

Редактировать: Оказывается, я сделал фундаментальную ошибку.В ООП лучше не выставлять данные из одного класса в другой класс.Вместо этого я написал геттеры в классе Employee, а затем вызвал их из моего другого класса.Таким образом, данные в Employee не предоставляются напрямую классу, который в них нуждался.

Ответы [ 2 ]

2 голосов
/ 25 сентября 2019

Даже если вы правильно поняли синтаксис, следующий код будет иметь плохую сложность порядка n - O (n).

if(employee.employableSkills.contains(Employee.EmployableSkills.JAVA)) {

Измените ваш список на реализацию хэша набора

Set<Skill> employableSkills = new HashSet<>();

и теперь перебирайте сотрудников

int numberOfEmployeesWhoKnowJava = 0;
for (Employee employee : listOfEmployees) {
  if (employee.employableSkills.contains(Skill.JAVA)) {
     numberOfEmployeesWhoKnowJava++;
  } 
}

Это даст сложность O (1) при поиске навыков

0 голосов
/ 25 сентября 2019

Ваш вопрос немного неясен, но если моя интерпретация верна, попробуйте следующее:

if (employee.employableSkills.contains(Skill.JAVA))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...