两个LocalDateTimes的Java比较器

Cod*_*Med 2 java time jodatime comparator

名为的自定义类MyCustomClass具有其属性joda LocalDateTime。我需要创建一个java.util.Comparator类,MyCustomClass以按其TimeStamp属性比较实例,该属性的类型为LocalDateTime。我已经阅读了有关此内容的几篇文章(包括这一篇文章),并且尝试了所有方法,但是答案中显示的所有方法似乎都不起作用。例如,以下几种方法会引发编译错误:

import java.time.temporal.ChronoUnit;
import java.util.Comparator;

import org.joda.time.DateTime;
import org.joda.time.Duration;
import org.joda.time.Period;

import my.app.model.MyCustomClass;

public class MyCustomClassComparator implements Comparator<MyCustomClass>{
    public int compare(MyCustomClass mcc1, MyCustomClass mcc2) {
        //this first attempt throws a return type error for the method.
        return Period.fieldDifference(mcc2.getTimestamp(), mcc1.getTimestamp());
        //This next attempt says that LocalDateTimes are not valid arguments
        Duration.between(mcc2.getTimestamp(), mcc1.getTimestamp());
        //The next approach also says LocalDateTimes are not valid arguments.
        DateTime.parse(mcc2.getTimestamp()), mcc1.getTimestamp()).getSeconds();
        //This boilerplate approach says the minus sign is not valid for LocalDateTime
        return mcc1.getTimestamp() - mcc2.getTimestamp();
    }
}
Run Code Online (Sandbox Code Playgroud)

我打算在类似代码的其他地方使用它:

List<MyCustomClass> mccs = new ArrayList<MyCustomClass>();
// Sort by time stamp:
Collections.sort(mccs, new MyCustomClassComparator());
Run Code Online (Sandbox Code Playgroud)

如何编写一个Comparator类,以MyCustomClass根据其Joda LocalDateTime属性比较实例?

小智 6

如果您只需要一个比较器实例:

类似于I?ya Bursov的回答,因为 LocalDateTime 实现了可比性,您可以使用Comparator.comparing

Comparator.comparing(MyCustomClass::getTimestamp)
Run Code Online (Sandbox Code Playgroud)


Iły*_*sov 5

LocalDateTime实现类似的接口,因此您可以实现比较器,例如:

public class MyCustomClassComparator implements Comparator<MyCustomClass> {
    @Override
    public int compare(final MyCustomClass mcc1, final MyCustomClass mcc2) {
        return mcc1.getTimestamp().compareTo(mcc2.getTimestamp());
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 您必须是爱尔兰人或苏格兰人。试图定义“ lass”。我们其余的人拥有更多的“阶级”。我们知道,激光无法量化。;-) (3认同)