【发布时间】:2015-09-08 01:17:11
【问题描述】:
一个名为MyCustomClass 的自定义类有一个属性,它是joda LocalDateTime。我需要创建一个java.util.Comparator 类来通过TimeStamp 属性比较MyCustomClass 的实例,该属性的类型为LocalDateTime。我已经阅读了几篇关于此的帖子(包括this one),并且我尝试了所有方法,但答案中显示的方法似乎都不起作用。例如以下几种方法会抛出编译错误:
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)吗? -
或者完全取消
Comparator... -
@MadProgrammer 警告:如果
MyCustomClass以相同的比较实现Comparable<MyCustomClass>,则只能取消Comparator。 -
@Andreas 不确定我明白。
Comparator的唯一需要是Comparable的默认实现不是你想要的,但我看不到任何地方 OP 对它们的比较做了一些特别的事情
标签: java time jodatime comparator