Предположим, у меня есть массив двумерных массивов, которые представляют точки, которые я хочу сравнить.Например, я могу сравнить расстояние от начала координат.Что я могу сделать, это создать класс Point
:
class Point implements Comparable<Point>{
// class variables, constructor
public int compareTo(Point p) {
return (x*x + y*y).compareTo(p.x*p.x + p.y*p.y);
}
}
и заполнить массив типа Point
всеми точками, а затем использовать Array.sort(pointsArray)
.Это также можно сделать следующими способами:
1) Arrays.sort(points, Comparator.comparing(p -> p[0]*p[0] + p[1]*p[1]));
или
2) Arrays.sort(points, (p1, p2) -> p1[0]*p1[0] + p1[1]*p1[1] - p2[0]*p2[0] - p2[1]*p2[1]);
без создания какого-либо нового типа данных.Объяснение можно найти в этом вопросе.
Теперь, что если мне нужно сначала сравнить координату x и, если сравнение не показывает разницы, координату y, то есть:
class Point implements Comparable<Point>{
// class variables, constructor
public int compareTo(Point p) {
int cmp = x.compareTo(p.x);
if(cmp == 0) return y.compareTo(p.y);
return cmp;
}
}
Как это можно перевести в 1) и 2) ?