如何在foreach loop Java中具有最小特定字段(函数?)的对象



我试图从for-each循环中获取对象'雇员'的最小值。

我创造了一些员工;

// Create Employees
Employee Employee1 = new Employee(1, "Bradley", 0);
Employee Employee2 = new Employee(2, "Patrick", 0);
Employee Employee3 = new Employee(3, "Erin", 0);
Employee Employee4 = new Employee(4, "Jim", 0);
Employee Employee5 = new Employee(5, "Fredrick", 0);

第三个参数是分配的合同数,默认情况下为0。然后,我的代码分配了一些合同,并且分配的合同的数量会增加等。然后,我从上述员工中创建一个数组;

Employee[] employees = new Employee[] {Employee1, Employee2, Employee3, Employee4, Employee5};

我可以使用以下循环打印分配给每个员工的合同数量;

for (Employee employee : employees) {
    System.out.println(employee.numberOfCurrentlyAssignedContracts);
}

我试图以最少的员工数量返回员工。numberofCurrantyAssignedContracts,但是不是返回其INT值,我希望返回整个员工对象,以便我可以在其上调用单独的功能,例如:

雇员(分配合同的最小价值).Assigntract-将新合同分配给具有当前分配的合同数量最少的员工。因此,基本上,我如何让for-each退还员工而不是分配合同的INT值?

任何帮助都将不胜感激。

问候,b


当这三个提交答案起作用时,我该怎么办?谢谢。此外,如果2 具有相同的最小值,例如2员工,我如何随机退还员工。

您可以使用简单的循环找到具有最少合同数量的员工,如下所示:

int minContract = Integer.MAX_VALUE;
Employee empMin = null;
for (Employee employee : employees) {
    if (employee.getNumberOfCurrentlyAssignedContracts() < minContract) {
        // swap min and employee if true
        empMin = employee;
        minContract = empMin.getNumberOfCurrentlyAssignedContracts();
    }
}

现在,您有一个具有最低合同的员工对象的引用:

System.out.println(empMin);

如果您在Java-8上,则可以简单地做:

Employee empMin = Arrays.stream(employees)
                        .min((e1, e2) -> 
                                  e1.getNumberOfCurrentlyAssignedContracts() - 
                                  e2.getNumberOfCurrentlyAssignedContracts())
                        .get();

怎么样:

Employee minEmployee = Arrays.stream(employees)
      .sorted(Comparator.comparing(Employee::getNumberOfCurrentlyAssignedContracts))
      .findFirst().get();

您可以做这样的事情

Employee ref = employees[0];
int min = ref.numberOfCurrentlyAssignedContracts;
for (Employee employee : employees) {
    if(min>employee.numberOfCurrentlyAssignedContracts){
         min = employee.numberOfCurrentlyAssignedContracts;
         ref = employee;
    }
}

然后对ref

做任何您想做的事

当然,使用ArrayList而不是

要容易得多

类似的事情应该解决问题。之后,您要做的就是将合同分配给选定的人。

public static void main(String[] args) {
Employee employee1 = new Employee(1, "Bradley", 10);
Employee employee2 = new Employee(2, "Patrick", 70);
Employee employee3 = new Employee(3, "Erin", 50);
Employee employee4 = new Employee(4, "Jim", 4);
Employee employee5 = new Employee(5, "Fredrick", 8);
Employee[] employees = new Employee[] {employee1, employee2, employee3, employee4, employee5};
int employeeWithLeastContractsID = employees[0].getID();
int employeesWithLeastContractsTotal = employees[0].getContracts();;
for (Employee employee : employees) {
if(employee.getContracts() < employeesWithLeastContractsTotal){
    employeeWithLeastContractsID = employee.getID();
    employeesWithLeastContractsTotal = employee.getContracts();
}
}
System.out.println("Employee ID: "+employeeWithLeastContractsID + "nEmployee contracts: "+employeesWithLeastContractsTotal);
}

最新更新