【问题标题】:How to loop through an ArrayList within a custom Object?如何在自定义对象中循环遍历 ArrayList?
【发布时间】:2020-01-26 01:58:42
【问题描述】:

我意识到以前有人问过这个问题的变体,但我很难弄清楚如何完成以下任务:

我有一个看起来像这样的对象(请注意,“技能”和“认证”是 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 对象的 List 并检查它是否包含 JAVA?

编辑:事实证明我犯了一个根本性错误。在 OOP 中,最好不要将一个类的数据暴露给另一个类。相反,我在 Employee 类中编写了 getter,然后从我的其他类中调用这些 getter。这样,Employee 中的数据就不会直接暴露给需要它的类。

【问题讨论】:

  • 你能分享一下那个枚举技能的定义吗?

标签: java loops object arraylist


【解决方案1】:

即使你的语法正确,下面的代码也会有很差的 n - O(n) 阶复杂度。

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

将您的 List 更改为 set 的哈希实现

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

现在遍历员工

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

这将在查看技能时给出 O(1) 的复杂度

【讨论】:

    【解决方案2】:

    你的问题有点不清楚,但如果我的解释是正确的,试试这个:

    if (employee.employableSkills.contains(Skill.JAVA))
    

    【讨论】:

    • 这给了我同样的问题:“无法解析符号:技能”
    • @Umbrella_Programmer 导入它。
    • 就像我说的你的问题有点不清楚,@Umbrella_Programmer,请发布一切
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 2014-02-22
    • 2020-06-09
    • 2015-03-17
    相关资源
    最近更新 更多