【问题标题】:How to write a comparator for SimpleObjectProperty<Date>如何为 SimpleObjectProperty<Date> 编写比较器
【发布时间】: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 语句尝试了&lt; 运算符。这些也没有用。大量的在线搜索并没有向我揭示答案。

首次发现日期及其方法定义如下:

//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 项目。

这里的关键是如何比较ObjectObject

【问题讨论】:

  • 为什么getFirstFoundDate() 声明返回Object 而不是... Date?如果您将返回类型更改为Date,那么您的第二个Comparator 实现应该可以工作(尽管您可以将其简化为Comparator.comparing(ModelDefects::getFirstFoundDate))。 旁注:我强烈考虑使用java.time API。
  • 实际上,如果你想通过减法进行比较,getFirstFoundDate() 必须返回一个数字类型。您在第一个示例中提供的代码甚至无法编译。
  • 您没有提供足够的信息,例如SimpleObjectProperty 的完整定义。我们无法猜测您的想法或您未共享的代码中的内容。
  • “我只是在来这里之前尝试了一些东西” -- 我建议您使用tour 并阅读How to Ask。来到这里需要更多的实验和调试才能提出一个有意义的、可回答的问题。
  • 因为SimpleObjectProperty 是通用的。所以你真正拥有的是一个SimpleObjectProperty&lt;Date&gt;,这意味着它拥有一个Date 实例。您可能对例如SimpleBooleanProperty 如何是 booleanSimpleDoublePropertydouble,等等。所以你推断SimpleObjectProperty&lt;T&gt;Object 但它实际上是T

标签: java comparator comparable


【解决方案1】:

当 getter 数据类型设置为 object 时,您无法比较 SimpleObjectProperty,并且无论如何都不应该将 getter 设置为 object

SimpleObjectProperty 实际上是一个泛型:SimpleObjectProperty&lt;T&gt;,数据类型为T。因此,就我而言,将 getter 的数据类型从 Object 更改为 Date 并将比较器修改为:return o1.getFirstFoundDate().compareTo(o2.getFirstFoundDate()) 解决了这个问题。

【讨论】:

    猜你喜欢
    • 2023-03-30
    • 2019-03-19
    • 1970-01-01
    • 2016-03-10
    • 2015-03-09
    • 2019-06-28
    • 1970-01-01
    • 2011-03-27
    • 2010-09-24
    相关资源
    最近更新 更多