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)
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)