猿问

如何在 foreach 循环 java 中返回特定字段(函数?)最小值的对象

我正在尝试从 for-each 循环中获取对象“Employee”的最小值。


我创建了一些员工;


// 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);

}

我正在尝试返回具有最小员工数的员工。numberOfCurrentlyAssignedContracts,但不是返回它的int值,我希望返回整个员工对象,以便我可以对其调用单独的函数,例如:


employee(具有最小价值的已分配合同).assignmentContract - 将新合同分配给当前分配的合同数量最少的员工。那么基本上,我如何让 for-each 返回员工,而不是分配合同的整数?


任何帮助将不胜感激。


问候, B


当所有三个提交的答案都有效时,我该怎么办?!谢谢。此外,如果2 +具有相同的最小值,我怎么能随机返回一名员工,例如,2名员工都分配了0个分配的合同。


德玛西亚99
浏览 319回答 4
4回答

SMILET

像这样的东西应该可以解决问题。之后,您所要做的就是将合同分配给选定的人。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){&nbsp; &nbsp; employeeWithLeastContractsID = employee.getID();&nbsp; &nbsp; employeesWithLeastContractsTotal = employee.getContracts();}}System.out.println("Employee ID: "+employeeWithLeastContractsID + "\nEmployee contracts: "+employeesWithLeastContractsTotal);}

qq_花开花谢_0

您可以使用简单的 for 循环来查找具有最少数量合同的员工,如下所示:int minContract = Integer.MAX_VALUE;Employee empMin = null;for (Employee employee : employees) {&nbsp; &nbsp; if (employee.getNumberOfCurrentlyAssignedContracts() < minContract) {&nbsp; &nbsp; &nbsp; &nbsp; // swap min and employee if true&nbsp; &nbsp; &nbsp; &nbsp; empMin = employee;&nbsp; &nbsp; &nbsp; &nbsp; minContract = empMin.getNumberOfCurrentlyAssignedContracts();&nbsp; &nbsp; }}现在,您有一个对具有最小协定的 employee 对象的引用:System.out.println(empMin);如果您使用的是java-8,那么您可以简单地执行以下操作:Employee empMin = Arrays.stream(employees)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .min((e1, e2) ->&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e1.getNumberOfCurrentlyAssignedContracts() -&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e2.getNumberOfCurrentlyAssignedContracts())&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .get();

手掌心

怎么样:Employee&nbsp;minEmployee&nbsp;=&nbsp;Arrays.stream(employees) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.sorted(Comparator.comparing(Employee::getNumberOfCurrentlyAssignedContracts)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.findFirst().get();

万千封印

你可以做这样的事情Employee ref = employees[0];int min = ref.numberOfCurrentlyAssignedContracts;for (Employee employee : employees) {&nbsp; &nbsp; if(min>employee.numberOfCurrentlyAssignedContracts){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;min = employee.numberOfCurrentlyAssignedContracts;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ref = employee;&nbsp; &nbsp; }}然后做任何你想做的事情ref当然,使用一个会容易得多ArrayList
随时随地看视频慕课网APP

相关分类

Java
我要回答