Java 8 如何对LocalDateTime进行排序并获取最大值和最小值?

Java 8 如何对LocalDateTime进行排序并获取最大值和最小值?,java-8,Java 8,任何人都可以共享逻辑来对LocalDateTime进行排序,并从域对象列表中获取最大和最小记录 域对象- private int employeeNumber; private LocalDateTime updatedDate; 第一记录 1.1,2016-07-09 00:00:00+0000 2.2,2017-10-06 23:25:37+0000 最大输出:22017-10-06 23:25:37+0000 最小输出:12016-07-09 00:00:00+0000您的简化数据集

任何人都可以共享逻辑来对LocalDateTime进行排序,并从域对象列表中获取最大和最小记录

域对象-

private int employeeNumber;
private LocalDateTime updatedDate;
第一记录

1.1,2016-07-09 00:00:00+0000
2.2,2017-10-06 23:25:37+0000
最大输出:22017-10-06 23:25:37+0000


最小输出:12016-07-09 00:00:00+0000

您的简化数据集

DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssxx");
dates.add(LocalDateTime.parse("2016-07-09 00:00:00+0000", fmt));
dates.add(LocalDateTime.parse("2017-10-06 23:25:37+0000", fmt));
将哈希集转换为流并从中产生最小值和最大值

System.out.println("Min: " + dates.stream().min(LocalDateTime::compareTo));
System.out.println("Max: " + dates.stream().max(LocalDateTime::compareTo));
输出:

分钟:2016-07-09T00:00
Max:2017-10-06T23:25:37


您现在可以轻松地将此核心逻辑调整到您的场景中。

假设您的域对象名为“Employee”,并将
列表作为域对象列表。然后,您可以通过传递比较器使用Java8排序函数,如下所示。随后,您应根据需要提取最小值和最大值

employeeList.sort((Employee e1, Employee e2) -> e1.getUpdatedDate().compareTo(e2.getUpdatedDate()));
查找下面的代码示例以供参考

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.List;

public class Main {
    static DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssxx");

    static Employee emp1 = new Employee(1, LocalDateTime.parse("2017-10-06 23:25:37+0000", format));
    static Employee emp2 = new Employee(2, LocalDateTime.parse("2016-07-09 00:00:00+0000", format));
    static Employee emp3 = new Employee(3, LocalDateTime.parse("2017-10-06 23:25:38+0000", format));
    static Employee emp4 = new Employee(4, LocalDateTime.parse("2016-07-09 00:00:00+0000", format));

    static List<Employee> employeeList = Arrays.asList(new Employee[] { emp1, emp2, emp3, emp4 });

    public static void main(String[] args) {
        employeeList.sort((Employee e1, Employee e2) -> e1.getUpdatedDate().compareTo(e2.getUpdatedDate()));

        System.out.println("Max:" + employeeList.get(employeeList.size() - 1));
        System.out.println("Min:" + employeeList.get(0));

        System.out.println("==== Complete list ===");
        employeeList.forEach(e -> System.out.println(e));

    }
}

class Employee {
    private int employeeNumber;
    private LocalDateTime updatedDate;

    public Employee() {
    }

    public Employee(int employeeNumber, LocalDateTime updatedDate) {
        this.employeeNumber = employeeNumber;
        this.updatedDate = updatedDate;
    }

    public int getEmployeeNumber() {
        return employeeNumber;
    }

    public void setEmployeeNumber(int employeeNumber) {
        this.employeeNumber = employeeNumber;
    }

    public LocalDateTime getUpdatedDate() {
        return updatedDate;
    }

    public void setUpdatedDate(LocalDateTime updatedDate) {
        this.updatedDate = updatedDate;
    }

    public String toString() {
        return String.format("Employee Number: %s, Updated Date: %s", this.employeeNumber, this.updatedDate);
    }
}
import java.time.LocalDateTime;
导入java.time.format.DateTimeFormatter;
导入java.util.array;
导入java.util.List;
公共班机{
静态DateTimeFormatter格式=模式的DateTimeFormatter.of(“yyyy-MM-dd HH:MM:ssxx”);
静态员工emp1=新员工(1,LocalDateTime.parse(“2017-10-06 23:25:37+0000”,格式));
静态员工emp2=新员工(2,LocalDateTime.parse(“2016-07-09 00:00:00+0000”,格式));
静态员工emp3=新员工(3,LocalDateTime.parse(“2017-10-06 23:25:38+0000”,格式));
静态员工emp4=新员工(4,LocalDateTime.parse(“2016-07-09 00:00:00+0000”,格式));
静态列表employeeList=Arrays.asList(新员工[]{emp1,emp2,emp3,emp4});
公共静态void main(字符串[]args){
sort((Employee e1,Employee e2)->e1.getUpdateDate().compareTo(e2.getUpdateDate());
System.out.println(“Max:+employeeList.get(employeeList.size()-1));
System.out.println(“Min:+employeeList.get(0));
System.out.println(“==完整列表==”);
employeeList.forEach(e->System.out.println(e));
}
}
班级员工{
私人国际雇员人数;
私有LocalDateTime更新日期;
公职人员(){
}
公共雇员(int employeeNumber,LocalDateTime UpdateDate){
this.employeeNumber=employeeNumber;
this.updateDate=updateDate;
}
public int getEmployeeNumber(){
返回员工编号;
}
公共无效setEmployeeNumber(int employeeNumber){
this.employeeNumber=employeeNumber;
}
公共LocalDateTime GetUpdateDate(){
返回更新日期;
}
公共无效SetupDateDate(LocalDateTime UpdateDate){
this.updateDate=updateDate;
}
公共字符串toString(){
返回字符串.format(“员工编号:%s,更新日期:%s”,this.employeeNumber,this.updateDate);
}
}