番石榴';s ComparisonChain到JavaScript的转换
我正在将一些代码从Java转换为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,
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;
}