[英]Java/ Sort array which contain points
我有點數組: 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()
,但要點是不可比的。 有一個簡單的方法嗎?
您可以將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點,而是您自己的類,則最好讓它實現Comparable
。 讓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
類。 如果不可能,請參閱其他答案以獲取替代解決方案。
您可以嘗試(偽代碼)。
Arrays.sort(p, new Comparator<Point >() {
public int compare(Point p1, Point p2) {
//here operations and return
}
});
由於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());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.