一个叫做
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();
}
}
我打算在代码的其他地方使用它,比如:
List<MyCustomClass> mccs = new ArrayList<MyCustomClass>();
// Sort by time stamp:
Collections.sort(mccs, new MyCustomClassComparator());
如何编写一个Comparator
类,以基于它们的Joda LocalDateTime
属性比较MyCustomClass
实例?
LocalDateTime
已经实现了Comparable
接口,你可以直接使用mcc1.compareTo(mcc2)
进行比较。 - MadProgrammerComparator
... - MadProgrammerMyCustomClass
实现了相同比较的Comparable<MyCustomClass>
接口时,才能摆脱Comparator
。 - AndreasComparable
不是你想要的情况下才需要一个Comparator
,但我看不到OP在比较方面做出任何特殊的事情。 - MadProgrammer