我希望每个循环都有一个循环来遍历一个对象数组..但只有作为特定类实例的对象。为了更清楚我的意思,我已经将下面的例子包括在内......
//Declare a list of employee objects
List<Employee> employees = new ArrayList<Employees>;
//Create some employees...
Employee employee = new Employee();
//The class EmployeeExtender extends and is a child of Employee
EmployeeExtender employeeExtended = new EmployeeExtender();
//Now add all the employees, even the ones of different instances to the list
employees.add(employee);
employees.add(employeeExtended);
现在我想介绍一个循环遍历employees
列表的每个循环,该循环只循环通过EmployeeExtender
实例的员工。我可以遍历每一个并使用if语句(如下所示),但我想知道是否有一种方法没有单独的列表来执行此操作。
//I would like to only loop through employees that are an instance of EmployeeExtender
for(Employee employee : employees){
//I would like to not have this if statement...
if(employee instanceof EmployeeExtender){
//do logic...
}
}
我唯一的选择是创建单独的列表,还是使用if语句?我想知道是否还有更多选择。感谢。
答案 0 :(得分:3)
没有考虑过的一个选择是将逻辑分配给一个空方法,这个方法在您感兴趣的子类中被覆盖。我不认为我&#39 ; d建议这样做,但你确实要求除了直接的每个/实例方式之外的其他选项。
public class Employee {
public void doTheLogic(TheClassYoureCallingFrom caller) {
}
}
public class EmployeeExtended extends Employee {
@Override
public void doTheLogic(TheClassYoureCallingFrom caller) {
// The actual logic goes here.
}
}
public class TheClassYoureCallingFrom {
List<Employee> employees = new ArrayList<Employees>;
public void theMethodYoureCallingFrom() {
for (Employee employee : employees) {
employee.doTheLogic(this);
}
}
}
当然,如果您不使用调用类的任何方法,则无需将其作为参数传递。
答案 1 :(得分:1)
您可以使用Streams:
employees.stream()
.filter(employee -> employee instanceof EmployeeExtender)
.forEach(employee -> {
//do logic
});