ポイントを持つ配列があります: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
これには、クラスの編集が必要です。それが不可能な場合は、代替ソリューションの他の回答を参照してください。