【发布时间】:2021-08-13 20:59:35
【问题描述】:
我知道有很多类似的问题,并且通过阅读这些问题的答案我得到了很大的帮助,但是我无法看到我的客户是如何面对这个问题的。而且只有一个客户面临这个问题。
我有一个列表,我正在使用 Comparator 界面对该列表进行排序。大家有没有发现以下代码有问题?
private static class BiologySamplesComparator implements Comparator<BiologySample>, Serializable {
@Override
public int compare(BiologySample left, BiologySample right) {
if (left == right || (left != null && right != null && left.getSampleDateTime() == right.getSampleDateTime())) {
return 0;
}
if (left == null || left.getSampleDateTime() == null) {
return 1;
}
if (right == null || right.getSampleDateTime() == null) {
return -1;
}
return right.getSampleDateTime().compareTo(left.getSampleDateTime());
}
}
这就是我调用这个函数的方式
Collections.sort(biologySamples, new BiologySamplesComparator());
我知道这种情况下的主要问题是传递性。但是我不知道是什么违反了该规则。
getSampleDateTime() 如何返回日期Fri Apr 09 17:00:00 PDT 2021
更新 这就是我能够解决问题的方法。 我希望这会有所帮助,我被这个问题困扰了很长时间。
private static class BiologySamplesComparator implements Comparator<BiologySample>, Serializable {
@Override
public int compare(BiologySample left, BiologySample right) {
if (left == null) {
if (right == null) {
return 0;
} else {
return 1;
}
} else if (right == null) {
return -1;
} else if (left == right) {
return 0;
}
if (left.getSampleDateTime() == null) {
if (right.getSampleDateTime() == null) {
return 0;
} else {
return 1;
}
} else if (right.getSampleDateTime() == null) {
return -1;
} else if (left.getSampleDateTime() == right.getSampleDateTime()) {
return 0;
}
return right.getSampleDateTime().compareTo(left.getSampleDateTime());
}
}
【问题讨论】:
标签: java android collections comparator