番石榴';s ComparisonChain到JavaScript的转换

番石榴';s ComparisonChain到JavaScript的转换,javascript,java,comparisonchain,Javascript,Java,Comparisonchain,我正在将一些代码从Java转换为JavaScript,我遇到了以下代码: static final Comparator<Point> compareXCoord = new Comparator<Point>() { @Override public int compare(Point o1, Point o2) { return ComparisonChain.start(). compare(o1.x,

我正在将一些代码从Java转换为JavaScript,我遇到了以下代码:

static final Comparator<Point> compareXCoord = new Comparator<Point>() {
    @Override
    public int compare(Point o1, Point o2) {
        return ComparisonChain.start().
                compare(o1.x, o2.x).
                compare(o1.y, o2.y).
                result();
    }
};

static final Comparator<Point> compareYCoord = new Comparator<Point>() {
    @Override
    public int compare(Point o1, Point o2) {
        return ComparisonChain.start().
                compare(o1.y, o2.y).
                compare(o1.x, o2.x).result();
    }
};

...

Arrays.binarySearch(ypoints, Point.make(Double.NEGATIVE_INFINITY, ymin),
            compareYCoord);
但这两种方法都可以简化为
return(p1.y==p2.y | | p1.x==p2.x)?p1:未定义


我觉得我肯定误解了ComparisonChain的工作原理。链条的顺序重要吗?关于如何将其转换为JavaScript的说明,您需要记住Java返回值是三值的(即更高、更低或相等)。因此,比较坐标的顺序很重要-先按
x
排序与先按
y
排序不同。

这些比较器在比较
(1,2)
(2,1)
时的方式不同
CompareCoord
会说
(1,2)
CompareCoord
会说
(1,2)>(2,1)
function compareXCoord(p1, p2) {
  return (p1.x === p2.x) ? p1 : 
         (p1.y === p2.y) ? p1 : undefined;
}

function compareYCoord(p1, p2) {
  return (p1.y === p2.y) ? p1 : 
         (p1.x === p2.x) ? p1 : undefined;
}