当前位置: 首页 > 知识库问答 >
问题:

比较对象的两个日期属性时出现异常“比较方法违反其总合同!

姚自强
2023-03-14

首先,我已经看了很多关于这个异常的问题和答案,但是大多数都只是比较简单的整数或者相同的属性。我有一个有两个日期的对象,当其中一个为空时,我将使用另一个进行比较,例如:

public class MyClass {
  private LocalDate primaryDate;
  private LocalDate secondaryDate;
  private String Code;
}

比较方法是:

 private List<MyClass> sortByDates(final List<MyClass> listOfClass) {
    Comparator<MyClass> comparator = ((Comparator<MyClass>) (first, second) -> {
        if (first.getPrimaryDate() == null || second.getPrimaryDate() == null) {
            return first.getSecondaryDate().compareTo(second.getSecondaryDate());
        }
        return first.getPrimaryDate().compareTo(second.getPrimaryDate());
    }).reversed().thenComparing(MyClass::getCodeAsLong);

    return listOfClass.stream()
        .sorted(comparator)
        .collect(Collectors.toList());
}

Obs1: secondaryDate从不为空,但我必须使用< code>primaryDate作为第一个选项进行比较,并且< code>primaryDate从不小于< Code > secondary date < br > OBS 2:< Code > Code 属性保存为字符串,但没有任何字母,因此可以转换为long

共有1个答案

卓雅达
2023-03-14

唯一的问题是如何处理<code>primaryDate</code>的null
检查以下示例:

 类似资料:
  • 我已经在类上实现了Comaprable,它给了我比较方法违反了它的总合同!,由于有一些值返回为 null,代码如下 公共静态比较器名称比较器 = 新比较器() {

  • 我试图使用比较器基于两个字符串的比较对数组列表进行排序,但我最终使用的比较方法违反了它的一般契约错误。如果字符串中出现空值比较,我该如何处理? 密码 错误

  • 我有一个类字段,和。我需要使用对它们进行排序,但我得到了一个异常: java.lang.IllegalArgumentException:比较方法违反了它的一般约定! 我的< code>compareTo方法: 请帮我找出compareTo方法中的错误。谢了。

  • 我目前正在Java中对集合进行排序。我收到了错误消息“比较方法违反了它的一般契约”。我也理解这个错误消息,但我(主要)使用Long类型的构建比较方法。所以我不知道,在这种情况下,排序方法仍然违反了契约。这是我的代码: 这里是错误:

  • 可能的重复: 为什么我的比较方法会抛出异常 — 比较方法违反了其一般合同! 我有这个代码: 有时它会引发以下异常: 为什么? 1) 我该如何避免呢?2) 我怎么能抓住这个例外? 提前谢谢。

  • 对不起,又是一个问题,但我根本不明白这里发生了什么,或者我哪里出错了。 概述:我有一个包含多个-对象。它们有一个和一个。我想按以下条件对它们进行排序,优先级如下所列: 但是当这样做时,我得到以下错误: 我得到的:我在JavaFX项目中也有同样的事情发生,但是在那里我使用而不是。我需要转换为,因为显然Android还不支持方法。 这是启动排序和定义< code>Comperator的方法: 如您所见