我试图从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);
}