2016-12-02 47 views
0

我有一个'Point'类。我想排序一个点的数组,但我想使用2个“比较”函数(我想要2个数组,其中一个点的排序是X,另一个是Y)。 如何让我的课程接受2个比较函数?这里是我的代码用Java排序的点数阵列

static class Point implements Comparator<Point>{ 
    int x,y; 
    int compareX(Point A , Point B){ 
     return A.x - B.x; 
    } 
    int compareY(Point A , Point B){ 
     return A.y - B.y; 
    } 
} 
+0

你没有2个比较函数吗? – XtremeBaumer

+0

问题是我需要实现将在Arrays.sort(myArray)中使用的“比较”函数 – ivanciprian

回答

3

而不必Point实施Comparator的,有2个Comparator常数,它由X和Y分别进行比较。

static class Point { 
    public static final Comparator<Point> X_COMPARATOR = Comparator.comparingInt(Point::getX); 

    public static final Comparator<Point> Y_COMPARATOR = Comparator.comparingInt(Point::getY); 
} 
+0

我不太确定该如何使用此比较器。这不起作用: \t \t 公共点sortByX(){ \t \t \t回Arrays.sort(这一点,X_COMPARATOR); \t \t} – ivanciprian

+0

@epanicafrate'Point'不是一个数组。 'Arrays.sort'将'Object []'作为第一个参数。 https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html#sort-T:A-java.util.Comparator- –

+0

我的意思是Collections.sort,而不是Arrays.sort,我的错。但它仍然不起作用。 – ivanciprian