n0h*_*epe 14 java collections arraylist
我有ArrayList,其中包含足球队(Team Team).团队有积分,我想按点数对它们进行排序.
public class Team {
private int points;
private String name;
public Team(String n)
{
name = n;
}
public int getPoints
{
return points;
}
public void addPoints(boolean win)
{
if (win==true)
{
points = points + 3;
}
else if (win==false)
{
points = points + 1;
}
}
//...
}
Run Code Online (Sandbox Code Playgroud)
主类:
List<Team> lteams = new ArrayList<Team>;
lteams.add(new Team("FC Barcelona"));
lteams.add(new Team("Arsenal FC"));
lteams.add(new Team("Chelsea"));
//then adding 3 points to Chelsea and 1 point to Arsenal
lteams.get(2).addPoints(true);
lteams.get(1).addPoints(false);
//And want sort teams by points (first index with most points).
Run Code Online (Sandbox Code Playgroud)
我做了比较器.
public class MyComparator implements Comparator<Team> {
@Override
public int compare(Team o1, Team o2) {
if (o1.getPoints() > o2.getPoints())
{
return 1;
}
else if (o1.getPoints() < o2.getPoints())
{
return -1;
}
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想用它(在主类)
Colections.sort(lteams, new MyComparator());
Run Code Online (Sandbox Code Playgroud)
我想看看:
但它没有排序.
PaR*_*RaJ 30
来源:这里
您可以使用Collections.sort自定义Comparator<Team>.
class Team {
public final int points;
// ...
};
List<Team> players = // ...
Collections.sort(players, new Comparator<Team>() {
@Override public int compare(Team p1, Team p2) {
return p1.points- p2.points;
}
});
Run Code Online (Sandbox Code Playgroud)
或者,你可以做Team implementsComparable<Team>.这定义了所有Team对象的自然顺序.使用a Comparator更灵活,因为不同的实现可以按名称,年龄等顺序排序.
为了完整起见,我应该注意,return o1.f - o2.f由于可能的溢出,必须非常谨慎地使用逐个减法的快捷方式(阅读:Effective Java 2nd Edition:Item 12:考虑实现Comparable).据推测,曲棍球并不是一项运动,其中球员可以在引起问题的数量上进球... =)
Dmi*_*ril 13
public class Team {
private int points;
private String name;
public Team(String n, int p) {
name = n;
points = p;
}
public int getPoints() {
return points;
}
public String getName() {
return name;
}
public static void main(String[] args) {
List<Team> lteams = new ArrayList<Team>();
lteams.add(new Team("FC Barcelona", 0));
lteams.add(new Team("Arsenal FC", 2));
lteams.add(new Team("Chelsea", 3));
Collections.sort(lteams, new MyComparator());
for (Team lteam : lteams) {
System.out.println(lteam.name + ": " + lteam.points + " points");
}
}
Run Code Online (Sandbox Code Playgroud)
}
class MyComparator implements Comparator<Team> {
@Override
public int compare(Team o1, Team o2) {
if (o1.getPoints() > o2.getPoints()) {
return -1;
} else if (o1.getPoints() < o2.getPoints()) {
return 1;
}
return 0;
}}
Run Code Online (Sandbox Code Playgroud)
输出:
切尔西:3分
阿森纳足球俱乐部:
巴塞罗那队2分:0分
| 归档时间: |
|
| 查看次数: |
59748 次 |
| 最近记录: |