Java 如何对对象数组排序?
我有一个像这样的对象数组Java 如何对对象数组排序?,java,Java,我有一个像这样的对象数组 Player p[] = new Player[t]; 每个对象都有一个整数变量和一个名称变量 public class Player { public String player_name; public int number; } 从用户获得输入后,如何根据对象数组的数字变量对其进行排序?创建一个实现比较器的类,称为sayPlayerComparator。通过创建一个包含两个Players的。返回负数、零或正数,具体取决于第一个播放器是否被视为小于、
Player p[] = new Player[t];
每个对象都有一个整数变量和一个名称变量
public class Player {
public String player_name;
public int number;
}
从用户获得输入后,如何根据对象数组的数字变量对其进行排序?创建一个实现
比较器的类,称为sayPlayerComparator
。通过创建一个包含两个Player
s的。返回负数、零或正数,具体取决于第一个播放器
是否被视为小于、等于或大于第二个播放器
然后,您可以创建您的PlayerComparator
并将其(连同您的数组)传递给。使用Java SE 8,尝试类似(未测试)的操作:
编辑
Player p[] = new Player[t];
// do stuff
Arrays.sort(p);
仔细想想,在这种情况下这可能更有效,因为它不会创建新的数组/集合:
Arrays.sort(p, (p1, p2) -> Integer.compare(p1.number, p2.number));
让您的自定义类实现Comparable
接口,然后您可以使用java集合对数组进行排序(Arrays.sort()
函数)
最简单的方法是使播放器
实现可比
,并在播放器
中实现比较(播放器)
方法:
public int compareTo(Player player) {
return this.number-player.number;
}
然后,只要调用Arrays.sort(p),就可以对数组进行排序代码>您需要在number变量上有一个getter才能使其工作,如:
public class Player {
public String player_name;
public int number;
public int getNumber() {
return number;
}
}
然后,从Java 8开始,您可以使用Comparing
factory类对其进行排序:
Player[] p = new Player[t];
Arrays.sort(p, Comparator.comparingInt(Player::getNumber));
这将:
- 通过比较
getNumber
方法中的no,创建一个比较器
- 这里您看到的是一个方法引用,它是lambda
p->player.getNumber()
的缩写,它将播放器映射到数字
Ref.(这是一个列表,然后请参阅)阅读数组。排序和比较器将你的眼睛转向右边的“相关”部分,你会发现你的问题的几十个重复项。+1在lambdas中思考:)注意,这可能不适用于大的负值。最好使用整数。比较
public class Player {
public String player_name;
public int number;
public int getNumber() {
return number;
}
}
Player[] p = new Player[t];
Arrays.sort(p, Comparator.comparingInt(Player::getNumber));