Mik*_*bol 7 java arrays sorting object
假设我有一个对象 - Team
。Team
有三个字段wins
,losses
和draws
。
如果我有几个对象说Team1
,Team2
,Team3
,其中Team1
有3胜2平1负,而1个系,Team2
有3胜3负,并Team3
有2胜3负,而1条领带。
将所有三个团队放在一个数组中。
我正在尝试按胜利对它们进行排序(我知道如何做到这一点......实施Comparable
,覆盖compareTo()
使用Array.sort
),如果两支球队的胜利相同,我想然后按损失对它们进行排序(最终将添加第三个字段进一步断绝关系)。
我应该编写自己的排序方法吗?有人可以指出我正确的方向,因为我不知道该去哪里。
类似于 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)
如果您有幸使用java-8,那么您可以这样做:
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)
这也可以更轻松地按其他内容排序,例如团队名称。
归档时间: |
|
查看次数: |
4546 次 |
最近记录: |