(Java) 如何对对象数组进行排序,并打破两个对象之间的联系?

Mik*_*bol 7 java arrays sorting object

假设我有一个对象 - TeamTeam有三个字段winslossesdraws

如果我有几个对象说Team1Team2Team3,其中Team1有3胜2平1负,而1个系,Team2有3胜3负,并Team3有2胜3负,而1条领带。

将所有三个团队放在一个数组中。

我正在尝试按胜利对它们进行排序(我知道如何做到这一点......实施Comparable,覆盖compareTo()使用Array.sort),如果两支球队的胜利相同,我想然后按损失对它们进行排序(最终将添加第三个字段进一步断绝关系)。

我应该编写自己的排序方法吗?有人可以指出我正确的方向,因为我不知道该去哪里。

use*_*300 5

类似于 Ben 的回答,但有点不同,为了清楚起见,我经常使用以下模式。这是一个Comparator,但Comparable的代码是类似的。

Comparator<Team> myComparator = new Comparator() {
   @Override
   public int compare(Team t1, Team t2) {
      int result = t1.getWins() - t2.getWins();
      if (result == 0)
         result = t2.getLosses() - t1.getLosses();
      if (result == 0)
         ... more tests here

      return result;
   }

};
Run Code Online (Sandbox Code Playgroud)

请注意,在极端情况下,取两个整数的差可能会溢出,因此更稳健的变体将使用。但是,在这种情况下,您的团队的胜负不太可能超过 2^31。:-)Integer.compare(t1.getWins(), t2.getWins())

要使用这个,去

Arrays.sort(myArrayOfTeams, myComparator);
Run Code Online (Sandbox Code Playgroud)


AJM*_*eld 5

如果您有幸使用,那么您可以这样做:

ArrayList<Team> teams = myTeams();

Collections.sort(teams,
    Comparator.comparingInt(Team::getWins())
              .thenComparingInt(Team::getTies());
    );
Run Code Online (Sandbox Code Playgroud)

或者,如果您使用的是数组:

Team[] teams = myTeams();

Arrays.sort(teams,
    Comparator.comparingInt(Team::getWins())
              .thenComparingInt(Team::getTies());
    );
Run Code Online (Sandbox Code Playgroud)

这也可以更轻松地按其他内容排序,例如团队名称。