我有一个像
这样的对象数组Player p[] = new Player[t];
每个对象都有一个整数变量和一个名称变量。
public class Player {
public String player_name;
public int number;
}
从用户那里获得输入后,如何根据数字变量对该对象数组进行排序?
答案 0 :(得分:1)
使用Java SE 8尝试类似(未经测试):
Arrays.stream(p).sorted((p1, p2) -> Integer.compare(p1.number, p2.number)) .collect(Collectors.toList())
修改强>
第二个想法在这种情况下这可能更有效,因为它不会创建新的数组/集合:
Arrays.sort(p, (p1, p2) -> Integer.compare(p1.number, p2.number));
答案 1 :(得分:0)
创建一个实现Comparator<Player>
的类,名为PlayerComparator
。通过创建需要两个Player
的{{3}}来实现界面。返回负数,零或正数,具体取决于第一个Player
是否被视为小于,等于或大于第二个Player
。
然后,您可以创建PlayerComparator
并将其(与数组一起)传递给compare
method。
答案 2 :(得分:0)
让您的自定义类实现Comparable
接口,然后您可以使用java Collection对数组进行排序(Arrays.sort()
函数)
public class Player implements Comparable<Player> {
public String player_name;
public int number;
@Override
public int compareTo(Player object) {
return this.player_name.compareTo(object.player_name);
}
}
<强>排序强>
Player p[] = new Player[t];
// do stuff
Arrays.sort(p);
答案 3 :(得分:0)
最简单的方法是Player
实施Comparable<Player>
,并在compareTo(Player)
内实施Player
方法:
public int compareTo(Player player) {
return this.number-player.number;
}
然后,无论您想要对数组进行排序,只需调用Arrays.sort(p);
答案 4 :(得分:0)
您需要在数字变量上使用getter才能使其正常工作,例如:
public class Player {
public String player_name;
public int number;
public int getNumber() {
return number;
}
}
然后,从Java 8开始,您可以使用Comparing
工厂类对其进行排序:
Player[] p = new Player[t];
Arrays.sort(p, Comparator.comparingInt(Player::getNumber));
这将:
Comparator<Person>
方法创建getNumber
。p -> player.getNumber()
的简写,它将玩家映射到数字。