说我有arraylist A
并比较A
我做a.getDistanceFromPlayer() < b.getDistanceFromPlayer()
的2个对象。
我现在想要列表B
,它将包含所有A
个对象,但是排序第一个对象最接近玩家的位置,最后一个对象最远。
最快的方法是什么?
由于
答案 0 :(得分:2)
您应该让您的课程实现 Comparabl e 。
然后,您可以使用Collections.sort()对列表进行排序。
如果您想要排序列表 AND 未排序列表,则必须复制。
另一种选择是创建Comparator。
如果您阅读documentation for Collections,则会看到它有两种排序方法。
一个基于对象' compareTo 方法的排序(即他们的“自然顺序”)。
另一个基于Comparator的排序,它作为第二个参数传递。
这是另一个提供Comparable示例实现的问题的链接:
答案 1 :(得分:2)
将Collections.sort与自定义比较器一起使用。
eg.
public class DistanceComparator implements Comparator<Integer>{
@Override
public int compare(YourObject o1, YourObject o2) {
if (o1.getDistanceFromPlayer() > o2.getDistanceFromPlayer())
{
return 1;
}
else if (o1.getDistanceFromPlayer() < o2.getDistanceFromPlayer())
{
return -1;
}
return 0;
}
}
然后在你的程序中,调用
Collections.sort(YourArrayInstance, new DistanceComparator())
答案 2 :(得分:2)
有一个实现Comparable然后定义方法compareTo(Object other),如下所示:
public int compareTo(Object other) {
if( this.getDistanceFromPlayer() < other.getDistanceFromPlayer() ) {
return -1;
} else if( this.getDistanceFromPlayer() > other.getDistanceFromPlayer()) {
return 1;
}
return 0;
}
现在,您可以在对象列表中调用Collections.sort()
答案 3 :(得分:1)
使用Custom Comparator
:
B = Collections.sort(A, new CustomComparator());
public class CustomComparator implements Comparator<ClassA> {
@Override
public int compare(final ClassA a, final ClassA b) {
//Make sure you check that neither a nor b are null..
//..
if (a.getDistanceFromPlayer() < b.getDistanceFromPlayer()) {
return 1;
} else if (a.getDistanceFromPlayer() > b.getDistanceFromPlayer()) {
return -1;
}
return 0;
}
}
答案 4 :(得分:1)
您可以使用自定义Comparator和sort ArrayList,如下所示:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
class Main {
public static class Player {
private final float distance;
public Player (final float position) {
this.distance = position;
}
public float getDistanceFrom () {
return distance;
}
@Override
public String toString() {
return "Player [distance=" + distance + "]";
}
}
public static void main(String[] args) throws Exception {
final ArrayList<Player> players = new ArrayList<Player> ();
players.add (new Player (2));
players.add (new Player (5));
players.add (new Player (-3));
players.add (new Player (1));
Collections.sort(players, new Comparator<Player> () {
@Override
public int compare(Player o1, Player o2) {
final float distance1 = o1.getDistanceFrom();
final float distance2 = o2.getDistanceFrom();
return (int) Math.signum (distance1 - distance2);
}
});
System.out.println(players);
}
}
并为它fiddle。