java - 如何在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);
}
我正在尝试返回具有最少employee.numberOfCurrentlyAssignedContracts 数量的员工,但不是返回它的int 值,而是希望返回整个员工对象,以便我可以在其上调用一个单独的函数,例如:
员工(分配合同的价值最小).assignContract - 将新合同分配给当前分配合同数量最少的员工。所以基本上,我如何让 for-each 返回员工而不是分配合同的 int 值?
任何帮助将不胜感激。
问候,乙
当所有三个提交的答案都有效时,我该怎么办?!谢谢。此外,如果 2+ 具有相同的最小值,我怎么能随机返回一名员工,例如,2 名员工都分配了 0 份合同。
解决方案
您可以使用一个简单的 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();
}
}
现在您有了对具有最少合同的员工对象的引用:
System.out.println(empMin);
如果您使用的是 java-8,那么您可以简单地执行以下操作:
Employee empMin = Arrays.stream(employees)
.min((e1, e2) ->
e1.getNumberOfCurrentlyAssignedContracts() -
e2.getNumberOfCurrentlyAssignedContracts())
.get();
推荐阅读
- python-2.7 - 如何模拟类中对象的方法?
- c++ - 为什么 make_move_iterator() 不能与 back_inserter() 一起使用?
- javascript - 我想为嵌入制作一个命令处理程序,但只有一个嵌入有效,而其他嵌入无效
- html - 在 RStudio 中将 ioslides 幻灯片的标题居中
- r - R expand() 函数不采用变量列表
- functional-programming - OCaml 中的 h :: t 模式匹配是什么意思?
- java - 如何在cardView上添加插页式广告?
- sql - 为什么我的 SSIS 包没有从 Oracle 中的特定表中提取所有数据?
- javascript - 当通过服务工作者缓存文件时,缓存变得非常臃肿,服务工作者是否在缓存隐藏文件?
- mysql - MYSQL查询生成表中现有值的乘法