【问题标题】:android, Comparator sort wrongandroid,比较器排序错误
【发布时间】:2014-11-21 20:43:19
【问题描述】:

我有一个比较器按 3 个值排序:

  1. ORDER_BY_Points
  2. ORDER_BY_Gdif // 目标差
  3. ORDER_BY_Goals

首先我从一个 json 字符串中得到一个数组。我将数组发送到 StandingsSort.ORDER_BY_RULES

Arrays.sort(addressArray, StandingsSort.ORDER_BY_RULES);

这是我的代码:

static final Comparator<Standings> ORDER_BY_Points = new Comparator<Standings>() {
    public int compare(Standings a1, Standings a2) {
        return a1.points.compareTo(a2.points);
    }
};
static final Comparator<Standings> ORDER_BY_Gdif = new Comparator<Standings>() {
    public int compare(Standings a1, Standings a2) {
        return a1.Gdif.compareTo(a2.Gdif);
    }
};
static final Comparator<Standings> ORDER_BY_Goals = new Comparator<Standings>() {
    public int compare(Standings a1, Standings a2) {
        return a1.goalsP.compareTo(a2.goalsP);
    }
};

static final Comparator<Standings> ORDER_BY_RULES = new Comparator<Standings>() {
    public int compare(Standings a1, Standings a2) {
        int i = ORDER_BY_Points.compare(a1,a2);
        if(i == 0){
            i = ORDER_BY_Gdif.compare(a1,a2);
            if(i == 0){
                i = ORDER_BY_Goals.compare(a1,a2);
            }
        }
        return i;
    }
};

class Standings {

    String teamName;
    String goalsP;
    String goalsM;
    String Gdif;
    String points;
    @Override
    public String toString() {
        return "" + teamName + ","  + goalsP + ":" + goalsM + "," + Gdif + "," + points + "";
    }
    public Standings(String teamName, String goalsP,
                String goalsM, String Gdif, String points) {
        super();
        this.teamName = teamName;
        this.goalsP = goalsP;
        this.goalsM = goalsM;
        this.Gdif = Gdif;
        this.points = points;
    }
}

但是结果不行!这是结果

Name, Goals, GDif, Points
Team,11:9,2,10
Team,5:3,2,10
Team,9:2,7,11
Team,0:6,-6,2
Team,3:9,-6,2
Team,6:9,-3,3
Team,8:13,-5,3
Team,8:9,-1,5
Team,8:11,-3,5
Team,8:7,1,5

为什么 Comparator 排序错误?

【问题讨论】:

  • 您使用哪种排序获得结果?
  • @clever_trevor Arrays.sort(addressArray, StandingsSort.ORDER_BY_RULES);
  • 请编辑您的帖子。你首先给出了结果,然后告诉你之后做了哪种。更令人困惑的是“在那之后我做”。因为看起来好像你是在得到结果后才这样做的。所以最好先告诉你使用哪种排序,然后给出结果。
  • 请给出排名的定义。
  • 请添加一些代码来实例化这些项目,以便我们可以复制、粘贴和尝试。

标签: android sorting comparator


【解决方案1】:

由于您将点存储为Strings,因此“10”位于“2”、“3”和“5”之前。如果要按数值顺序比较,需要先转换成ints。

同样,Gdif 和目标被比较为Strings,这可能不是您想要的。

【讨论】:

  • 好收获。但最好将排名中的所有String goalsP; String goalsM; String Gdif; String points; 更改为整数。
猜你喜欢
  • 2015-06-09
  • 1970-01-01
  • 2013-08-21
  • 2021-06-16
  • 1970-01-01
  • 2013-04-30
  • 2020-10-08
  • 1970-01-01
相关资源
最近更新 更多