为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

德玛西亚99 2022-08-03 15:37:52
我正在尝试从 for-each 循环中获取对象“Employee”的最小值。我创建了一些员工;// Create EmployeesEmployee 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个分配的合同。
查看完整描述

4 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

像这样的东西应该可以解决问题。之后,您所要做的就是将合同分配给选定的人。


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

}


查看完整回答
反对 回复 2022-08-03
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

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


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

    }

}

现在,您有一个对具有最小协定的 employee 对象的引用:


System.out.println(empMin);

如果您使用的是java-8,那么您可以简单地执行以下操作:


Employee empMin = Arrays.stream(employees)

                        .min((e1, e2) -> 

                                  e1.getNumberOfCurrentlyAssignedContracts() - 

                                  e2.getNumberOfCurrentlyAssignedContracts())

                        .get();


查看完整回答
反对 回复 2022-08-03
?
手掌心

TA贡献1942条经验 获得超3个赞

怎么样:

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


查看完整回答
反对 回复 2022-08-03
?
万千封印

TA贡献1891条经验 获得超3个赞

你可以做这样的事情


Employee ref = employees[0];

int min = ref.numberOfCurrentlyAssignedContracts;

for (Employee employee : employees) {

    if(min>employee.numberOfCurrentlyAssignedContracts){

         min = employee.numberOfCurrentlyAssignedContracts;

         ref = employee;

    }

}

然后做任何你想做的事情ref


当然,使用一个会容易得多ArrayList


查看完整回答
反对 回复 2022-08-03
  • 4 回答
  • 0 关注
  • 318 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号