【发布时间】:2020-12-30 17:07:42
【问题描述】:
要求是找到最新的员工对象(最新日期),其组号为 8 和部门 2,组号 4 在部门 2 中。同样的方法是部门 1 中的组号 8 和部门 1 中的组号 4。我只在最终列表中需要上述所有对象中最新的一个。
编写的比较逻辑是按照所需的顺序对其进行排序并仅保留所需的对象。但是我被困住了,因为我找不到从排序列表中保留单个对象的方法。无论如何我可以实现它吗?忽略比较器逻辑,如果您能建议使用流或其他良好实现的任何 ootb 方式,不胜感激?
SimpleDateFormat df = new SimpleDateFormat("dd-mm-yyyy");
List<Employee> employees = new LinkedList<Employee>(Arrays.asList(
new Employee("Emp1", df.parse("12-08-2020"),
new EmpType("1", new Group(8))),
new Employee("Emp2", df.parse("11-08-2020"),
new EmpType("2", new Group(8))),
new Employee("Emp3", df.parse("10-08-2020"),
new EmpType("2", new Group(4))),
new Employee("Emp4", df.parse("17-08-2020"),
new EmpType("2", new Group(8))),
new Employee("Emp5", df.parse("19-08-2020"),
new EmpType("1", new Group(4)))));
/* Sorting logic to sort by group number first then by department and then by date */
Collections.sort(employees, new Comparator<Employee>() {
@Override
public int compare(Employee employee, Employee t1) {
int val = 0;
if (employee.getEmpType().getGroup().getNumber() < t1.getEmpType().getGroup().getNumber()) {
val = 1;
} else if (employee.getEmpType().getGroup().getNumber() > t1.getEmpType().getGroup()
.getNumber()) {
val = -1;
} else {
val = 0;
}
if (val == 0) {
val = -(employee.getEmpType().getDepartment().compareTo(t1.getEmpType().getDepartment()));
}
if (val == 0) {
val = -employee.getDate().compareTo(t1.getDate());
}
return val;
}
});
【问题讨论】:
-
你需要最新的员工意味着只有最新的日期吗?
-
谢谢罗诺。我实际上并没有从列表中寻找最大值。与原始描述一样,我需要每个条件的最新一个对象,其中组为 8,部门为 2,日期最晚,然后组为 4,部门 2 的日期最晚。那么组是 8 个部门 1 的最新日期,组是 4 个部门 1 的最新日期。
-
您需要为每种情况分别提供最新的吗?还是只有一个?
-
没错,Rono,需要在同一个最终列表中的每个条件中的最新一个。
标签: java sorting arraylist comparator