这是实际情况。有一个VO
Name Usagecount returncount number
A 0 0 123
B 1 1 234
C 0 2 345
D 2 3 546
首先,它应该根据使用次数降序排列。如果找到相同的使用计数,则应根据返回代码按升序排序。如果找到相同的返回计数,则应按数字升序排序。 当我尝试下面的代码片段时
public class SomeComparator implements Comparator<SomeVO> {
@Override
public int compare(SomeVO o1, SomeVO o2) {
int value1 = o2.getUsageCount().compareTo(o1.getUsageCount());
if (value1 == 0) {
int value2 = o1.getNumberofReturns().compareTo(o2.getNumberofReturns());
if (value2 == 0) {
return o1.getNumber().compareTo(o2.getNumber());
} else {
return value2;
}
}
return value1;
}
}
我得到输出 D、B、C,但我期望它是 D、B、A、C。
最佳答案
没有。您应该能够在您的 Comparator
(或 Comparable
)实现中实现所有排序逻辑。
例如(伪代码):
- 按颜色比较(显然是按字典顺序,即您的示例将“黑色”放在“黑色”之前)
- 如果相等,按座位比较
您的 Collections.sort
调用将根据您在 compare
或 compareTo
中的逻辑执行适当的排序。
关于java - 根据值排序数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35428897/