あなたの注文から、x 位置よりも y 位置を優先しているように見えるので、2 人を比較する場合は次のようになります。
if (a.y > b.y)
// a is before b
else if (a.x < b.x)
// a is before b
else
// b is before a
更新のために編集
この比較は、新しい条件でも引き続き機能します。Y 位置は X 位置よりも優先されます。Y 値が等しい場合、左上隅に最も近いポイントは、X 値が小さいポイントになります。オブジェクトをコンパレータにしたい場合は、これをコンパレータ関数として実装すると ArrayList.sort() を実行できるようになります。ここで、負の値は最初の人が 2 番目の人より前であることを意味します。
public int compareTo(person a, person b) {
if (a.y == b.y)
return a.x-b.x
else
return b.y-a.y
}
//compareTo(Tom, Harry) == -50 (tom is before harry)
//compareTo(Tom, Bob) == -25 (tom is before bob)
//compareTo(Dave, Bob) == 30 (dave is after bob)