我有员工列表,我正在尝试查找最新加入日期的Employee
。这就是我迄今为止所实现的。
员工:
package com;
public class Employee {
private String accountNumber;
private String joiningdate;
public Employee(String accountNumber, String joiningdate) {
super();
this.accountNumber = accountNumber;
this.joiningdate = joiningdate;
}
// setters and getters
}
应用程序:
package com;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class LatestDueDate {
public static void main(String[] args) throws Exception {
try {
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");
List < Employee > empList = new ArrayList < > ();
empList.add(new Employee("1234", "07/11/2020"));
empList.add(new Employee("1234", "06/12/2020"));
Employee emp = empList.stream().max(Comparator.comparing(Employee::getJoiningdate)).get();
} catch (Exception e) {
}
}
}
我知道我需要将字符串日期格式转换为date。
您可以将字符串日期转换为LocalDate
并在比较器内进行比较。但我建议您在Employee类中使用LocalDate
代替joiningdate
,这样您就不需要将比较器中的日期字符串解析为最新加入日期字符串。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
Employee emp = empList.stream()
.max(Comparator.comparing(e -> LocalDate.parse(e.getJoiningdate(), formatter)))
.get();
注意:不要使用旧的Date
类,而是使用java.time
的LocalDate
您按照员工的加入日期进行排序,但问题是您的Java类使用text字符串来表示该日期,而不是真正的java.util.Date
或等效的Java 8类。如果你必须坚持使用文本日期,那么你至少应该用ISO格式表示它们,例如
List<Employee> empList = new ArrayList<>();
empList.add(new Employee("1234", "2020/11/07"));
empList.add(new Employee("1234", "2020/12/06"));
Employee emp = empList.stream().max(Comparator.comparing(Employee::getJoiningdate)).get();
System.out.println("Latest employee joined on: " + emp.getJoiningDate());
上面的工作,因为文本日期2020/12/06
将排序在2020/11/07
之后。更好的方法可能是使用适当的日期类型表示加入日期,或者在对员工排序之前至少将文本日期转换为实际日期类型。