【发布时间】:2020-11-19 05:15:20
【问题描述】:
我尝试了以下方法,但都不起作用:
public static Comparator<ModelDefects> sortFirstFoundDateAscending() {
return new Comparator<ModelDefects>() {
@Override
public int compare(ModelDefects o1, ModelDefects o2) {
return o1.getFirstFoundDate() - o2.getFirstFoundDate();
}
};
}
public static Comparator<ModelDefects> sortFirstFoundDateAscending() {
return new Comparator<ModelDefects>() {
@Override
public int compare(ModelDefects o1, ModelDefects o2) {
return o1.getFirstFoundDate().compareTo(o2.getFirstFoundDate());
}
};
}
还通过if 语句尝试了< 运算符。这些也没有用。大量的在线搜索并没有向我揭示答案。
首次发现日期及其方法定义如下:
//Declaration:
private SimpleObjectProperty<Date> firstfounddate;
//Initialisation in Constructor:
this.firstfounddate = new SimpleObjectProperty<>();
//First Found Date
public Object getFirstFoundDate() {
return firstfounddate.get();
}
public void setFirstFoundDate(Date firstFoundDateArg) {
this.firstfounddate.set(firstFoundDateArg);
}
public SimpleObjectProperty<Date> firstFoundDateProperty() {
return firstfounddate;
}
这是一个 javafx 项目。
这里的关键是如何比较Object 和Object?
【问题讨论】:
-
为什么
getFirstFoundDate()声明返回Object而不是...Date?如果您将返回类型更改为Date,那么您的第二个Comparator实现应该可以工作(尽管您可以将其简化为Comparator.comparing(ModelDefects::getFirstFoundDate))。 旁注:我强烈考虑使用java.timeAPI。 -
实际上,如果你想通过减法进行比较,
getFirstFoundDate()必须返回一个数字类型。您在第一个示例中提供的代码甚至无法编译。 -
您没有提供足够的信息,例如
SimpleObjectProperty的完整定义。我们无法猜测您的想法或您未共享的代码中的内容。 -
“我只是在来这里之前尝试了一些东西” -- 我建议您使用tour 并阅读How to Ask。来到这里需要更多的实验和调试才能提出一个有意义的、可回答的问题。
-
因为
SimpleObjectProperty是通用的。所以你真正拥有的是一个SimpleObjectProperty<Date>,这意味着它拥有一个Date实例。您可能对例如SimpleBooleanProperty如何是boolean,SimpleDoubleProperty是double,等等。所以你推断SimpleObjectProperty<T>是Object但它实际上是T。
标签: java comparator comparable