根据值订购arraylist

时间:2016-02-16 09:43:12

标签: java sorting arraylist collections

这是实际情况。有一个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。

1 个答案:

答案 0 :(得分:4)

没有。您应该能够在Comparator(或Comparable)实现中实现所有排序逻辑。

例如(伪代码):

  • 按颜色比较(按字典顺序显示,即你的例子放&#34;黑&#34;之前&#34;黑&#34;)
  • 如果相等,按座位比较

然后,您的Collections.sort调用将根据comparecompareTo中的逻辑执行相应的排序。