对整数对列表进行排序java

hak*_*ata 1 java integer compare comparator

我想对整数对的数组列表进行排序。到目前为止,我已经能够根据第一个元素对它们进行排序,但是我得到了类似 (1,2)、(1,-2) 的结果。我还想根据第二个元素对它们进行排序,这样我就可以获得正确的排序数组列表,但我似乎无法让它工作。

第一个元素排序的代码是:

private class FirstElmComparator implements Comparator<Pair> {

    public int compare(Pair pr1, Pair pr2) {
        return pr1.compareFirstElms(pr2);
    }
}
Run Code Online (Sandbox Code Playgroud)

和 compareFirstElms 函数如下:

protected int compareFirstElms (Pair p) {
    return (new Integer (this.p1)).compareTo(new Integer (p.p1));
}
Run Code Online (Sandbox Code Playgroud)

我可以考虑使第二个元素比较器如下:

private class SecondElmComparator implements Comparator<Pair> {

    public int compare(Pair pr1, Pair pr2) {
        return pr1.compareSecondElms(pr2);
    }
}

protected int compareSecondElms (Pair p) {
    return (new Integer (this.p2)).compareTo(new Integer (p.p2));
}
Run Code Online (Sandbox Code Playgroud)

注意:p1 和 p2 是一对中的第一个和第二个元素。

但我认为它会覆盖第一个元素的排序顺序,还是我错了?任何人都可以帮我解决这个问题。

bez*_*max 5

您创建一个通用比较器来评估 Pair 的两个元素。

public int compare(Pair pr1, Pair pr2) {
    int firstResult = pr1.compareFirstElms(pr2);
    if (firstResult == 0) { //First comparison returned that both elements are equal
        return pr1.compareSecondElms(pr2);
    } else {
        return firstResult;
    }
}
Run Code Online (Sandbox Code Playgroud)