Guava 的 ComparisonChain 转换为 JavaScript
Guava's ComparisonChain conversion to JavaScript
我正在将一些代码从 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 匹配比较链的结果对象。
但我不明白的是,在我天真的眼中,这两种方法似乎都在做完全相同的事情:return 如果 x
或 y
属性匹配。唯一的区别是先检查x
属性,即检查的顺序不同。
此外,如果这是真的,那么 Arrays.binarySearch
方法将 return ypoints
个具有相同 x
属性的元素。我觉得这不是该功能的目的。
所以,我的 Java脚本翻译是:
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;
}
但这两个都可以简化为return (p1.y === p2.y || p1.x === p2.x) ? p1 : undefined;
。
我觉得我肯定误解了 ComparisonChain
的工作原理。链的顺序重要吗?关于如何将其翻译成 JavaScript.
的指导的奖励积分
您需要记住,Java Comparator
return 值是三值的(即更高、更低或相等)。因此,比较坐标的顺序很重要 - 先按 x
排序与先按 y
排序不同。
我正在将一些代码从 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 匹配比较链的结果对象。
但我不明白的是,在我天真的眼中,这两种方法似乎都在做完全相同的事情:return 如果 x
或 y
属性匹配。唯一的区别是先检查x
属性,即检查的顺序不同。
此外,如果这是真的,那么 Arrays.binarySearch
方法将 return ypoints
个具有相同 x
属性的元素。我觉得这不是该功能的目的。
所以,我的 Java脚本翻译是:
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;
}
但这两个都可以简化为return (p1.y === p2.y || p1.x === p2.x) ? p1 : undefined;
。
我觉得我肯定误解了 ComparisonChain
的工作原理。链的顺序重要吗?关于如何将其翻译成 JavaScript.
您需要记住,Java Comparator
return 值是三值的(即更高、更低或相等)。因此,比较坐标的顺序很重要 - 先按 x
排序与先按 y
排序不同。