【发布时间】:2016-07-01 16:09:06
【问题描述】:
我有一个具有多个属性的对象,其中两个用户可以选择排序依据,都可以是升序、降序或两者都不是(正常),并且它们彼此独立。所以我的情况是:
案例 1
- propA - 正常
- propB - 正常
案例 2
- propA - Asc
- propB - 正常
案例 3
- propA - 描述
- propB - 正常
你明白了。我正在使用Comparator 来执行此操作,到目前为止,当一个或两个值设置为Normal 时,我已经能够对其进行排序。我不确定的部分是当我选择通过这两种方法进行排序时该怎么做。例如,如果我想按 propA 升序和 propB 降序排序,它应该看起来像这样
propA propB
A Z
A D
B M
B A
R Q
Z Z
Z A
这是我现在的排序方式
@Override
public int compare(Field lhs, Field rhs) {
switch (growerSort) {
case NORMAL:
switch (fieldSort) {
case NORMAL:
return ((Integer) lhs.getID()).compareTo(rhs.getID());
case ASC:
return lhs.getPropB().toLowerCase().compareTo(rhs.getPropB().toLowerCase());
default:
return rhs.getPropB().toLowerCase().compareTo(lhs.getPropB().toLowerCase());
}
case ASC:
switch (fieldSort) {
case NORMAL:
return lhs.getPropA().toLowerCase().compareTo(rhs.getPropA().toLowerCase());;
case ASC:
return 0; // 0 used as placeholder
default:
return 0; // 0 used as placeholder
}
default:
switch (fieldSort) {
case NORMAL:
return rhs.getPropA().toLowerCase().compareTo(lhs.getPropA().toLowerCase());
case ASC:
return 0; // 0 used as placeholder
default:
return 0; // 0 used as placeholder
}
}
}
如何使用两个不同的字段进行排序,每个字段都有自己的排序顺序?
【问题讨论】:
-
两个厘米。首先,当为两个字段指定 ASC/DESC 时,您将需要评估其中一个字段的比较(以“主要”为准)。如果这是非零,则返回该值。只有当第一个比较为零(即第一个属性相等)然后您才考虑第二个字段的比较。第二点,如果您使用
case ASC和case DESC,那么default将更自然地适合您的设置。
标签: java sorting comparator