我有点数组:Point[] p = new Point[]
我想按x排序,然后按y排序。 意思是,如果我有
Point A = (1, 2)
Point B = (2, 1)
Point C = (1, 3)
Point D = (2, 2)
排序后,我会得到:[(1,2), (1,3), (2,1), (2,2)]
我尝试使用Arrays.sort()
,但点不具有可比性。有一种简单的方法可以做到吗?
答案 0 :(得分:3)
您可以将Arrays.sort
与自定义Comparer<Point>
:
Arrays.sort(p, new Comparator<Point>() {
int compare(Point a, Point b) {
int xComp = Integer.compare(a.x, b.x);
if(xComp == 0)
return Integer.compare(a.y, b.y);
else
return xComp;
}
});
图片的标题说明:
Point
对象可能是null
,则必须处理此问题
在compareTo
。Point
不是AWT点,而是您自己的
class,你最好让它实现Comparable
。答案 1 :(得分:1)
让Point
实现Comparable
界面,并覆盖其compareTo
方法以满足您的需求。
@Override
public int compareTo(Point p) {
if (this.x != p.x) {
return Integer.compareTo(this.x, p.x);
} else {
return Integer.compareTo(this.y, p.y);
}
}
了解详情:http://javarevisited.blogspot.com/2012/01/how-to-sort-arraylist-in-java-example.html#ixzz2S2i9k5V3
这需要编辑Point
类。如果那是不可能的,请参阅替代解决方案的其他答案。
答案 2 :(得分:1)
你可以尝试(伪代码)。
Arrays.sort(p, new Comparator<Point >() {
public int compare(Point p1, Point p2) {
//here operations and return
}
});
答案 3 :(得分:0)
由于Point没有实现可比性,您可以创建自己的类进行比较:
public class Sorter implements Comparator
{
public int compare(Object o1, Object o2)
{
Point pointOne = (Point)o1;
Point pointTwo = (Point)o2;
return ((pointOne.getX()+pointOne.getY())+"").compareTo(((pointTwo.getX()+pointTwo.getY())+""));
}
}
然后你可以使用这个Sorter类:
void mySortingFunc(Point[] points)
{
Arrays.sort(points, new Sorter());
}