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();
}