Java 按两个实体逐个排序对象

Java 按两个实体逐个排序对象,java,Java,我有一个包含以下变量(实体)的类: 我想对此类的实例进行如下排序: 按标识符变量对实例进行排序,然后对于具有相同标识符值的实例,按条目号变量对其进行排序 我知道我可以用这些实体中的一个作为键来实现Compariable,但我不知道如何在两个实体上按顺序排序。 也就是说,当我按条目编号排序时,按标识符排序后,不应干扰初始排序-第二次排序应仅适用于具有相同标识符值的实例 因此,实际上,我希望能够作为“第二个关键”项传递以解决关系。您可以通过两个字段进行比较,几乎和通过一个字段进行比较一样容易。使用以

我有一个包含以下变量(实体)的类:

我想对此类的实例进行如下排序:
标识符
变量对实例进行排序,然后对于具有相同
标识符
值的实例,按
条目号
变量对其进行排序

我知道我可以用这些实体中的一个作为键来实现Compariable,但我不知道如何在两个实体上按顺序排序。
也就是说,当我按
条目编号
排序时,按
标识符
排序后,不应干扰初始排序-第二次排序应仅适用于具有相同
标识符
值的实例


因此,实际上,我希望能够作为“第二个关键”项传递以解决关系。

您可以通过两个字段进行比较,几乎和通过一个字段进行比较一样容易。使用以下
compare()
方法创建一个:

public int compare(YourClass a, YourClass b) {
    int idDiff = a.getIdentifier().compareTo(b.getIdentifier());
    if (idDiff != 0) {
        return idDiff;
    }
    return a.getEntryNumber().compareTo(b.getEntryNumber());
}
如果您有空值或原语,则必须进行调整。

您还可以使用:


请注意,这是延迟比较,这意味着在找到第一个非零(表示不相等)结果之前,将执行比较。

您可以使用Comparable执行此操作。如果标识符相等,则按条目号进行比较。
public int compare(YourClass a, YourClass b) {
    int idDiff = a.getIdentifier().compareTo(b.getIdentifier());
    if (idDiff != 0) {
        return idDiff;
    }
    return a.getEntryNumber().compareTo(b.getEntryNumber());
}
public int compare(X a, X b) {
    return ComparisonChain.start()
     .compare(a.id, b.id)
     .compare(a.dateField, b.dateField)
     .result();
}