【问题标题】:Java - modify compareTo method to sort integers from 1Java - 修改 compareTo 方法以从 1 开始对整数进行排序
【发布时间】:2013-07-13 11:54:04
【问题描述】:

我正在尝试使用可比较的接口对对象的 ArrayList 进行排序:

public class Unit implements Comparable<Unit>{
    // attributes
    int position;
    @Override
    public int compareTo(Unit other) {
        return Integer.compare(position, other.position);
    }
}

现在我使用以下方法对 ArrayList 进行排序:

List<Unit> units = getAllUnits();
Collections.sort(units);

上面将从position 0开始对所有单位进行排序,但我希望它从position 1开始,因为position的默认值是zero

如何修改compareTo 方法?

【问题讨论】:

  • 我的解释(这个不清楚的问题)是否正确:您希望所有的零都在末尾吗?
  • 是的,我希望所有的零都在末尾。
  • 所以你希望它从高到低排序而不是从低到高?不清楚要问什么
  • @chancea:不,我只希望排序从 1 开始,我希望所有的零都出现在末尾。
  • 在另一个返回之前插入if (this.position == 0) return 1;

标签: java sorting arraylist


【解决方案1】:

(使用您评论中的信息,不会有负数,)您应该可以使用:

public int compareTo(Unit other) {
    if (position != other.position) {
        if (position == 0) {
            return 1;
        } else if (other.position == 0) {
            return -1;
        }
        return Integer.compare(position, other.position);
    } else {
        return 0;
    }
}

更新:它也适用于负数,示例输出:[-1, 1, 2, 0, 0]

【讨论】:

    猜你喜欢
    • 2018-02-15
    • 2014-03-21
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 2012-11-25
    相关资源
    最近更新 更多