ArrayList首先按距离排序,然后按类型排序

时间:2015-01-19 05:33:15

标签: java arraylist

我有一个ArrayList,我试图根据两个条件进行排序。首先是距离,然后是类型。 d_distance是一个双精度,对每个对象都是唯一的。没有两个d_distance可以是平等的。 type1-6的整数,两个对象可以是同一类型。这是我的实施:

Collections.sort(list, new Comparator<Abc>() {

            @Override
            public int compare(Abc lhs, Abc rhs) {

                if (lhs.d_distance > rhs.d_distance)
                    return 1;

                if (lhs.d_distance < rhs.d_distance){

                    if (lhs.type > rhs.type)
                        return 1;

                    if (lhs.type < rhs.type)
                        return -1;

                    return -1
                }
                return 0;
            }
        });

2 个答案:

答案 0 :(得分:1)

最简单的实施。

            @Override
            public int compare(Abc lhs, Abc rhs) {

                if (lhs.d_distance != rhs.d_distance)
                    return lhs.d_distance < rhs.d_distance ? -1 : 1;

                return lhs.type - rhs.type;
            }

但是既然你说距离永远不会相等,那么按类型排序作为次要排序是没有意义的。因此:

            @Override
            public int compare(Abc lhs, Abc rhs) {
              return Double.compare(lhs.d_distance, rhs.d_distance);
            }

答案 1 :(得分:0)

使用JDK实用程序方法Double.compare()Integer.compare()来帮助比较:

Collections.sort(list, new Comparator<Abc>() {
        @Override
        public int compare(Abc lhs, Abc rhs) {
            int c = Double.compare(lhs.d_distance, rhs.d_distance);
            return c == 0 ? Integer.compare(lhs.type, rhs.type) : c;
        }
    });

但是如果距离确实是唯一的,那么编码它们就没有价值,所以:

Collections.sort(list, new Comparator<Abc>() {
        @Override
        public int compare(Abc lhs, Abc rhs) {
            return Double.compare(lhs.d_distance, rhs.d_distance);
        }
    });