gpt4 book ai didi

javascript - Guava 的 ComparisonChain 转换为 JavaScript

转载 作者:行者123 更新时间:2023-12-02 13:28:45 25 4
gpt4 key购买 nike

我正在将一些代码从 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);

看起来很公平,因为它将返回匹配比较链的结果对象。

但我不明白的是,在我天真的眼中,这两种方法似乎都在做完全相同的事情:如果 xy 属性匹配,则返回。唯一的区别是首先检查 x 属性,即检查的顺序不同。

此外,如果这是真的,则 Arrays.binarySearch 方法将返回具有相同 x 属性的 ypoints 元素。我不认为这就是该函数的目的。

所以,我的 JavaScript 翻译是:

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:未定义;

我觉得我肯定误解了 ComparisonChain 的工作原理。链的顺序重要吗?有关如何将其转换为 JavaScript 的指导的奖励积分。

最佳答案

您需要记住 Java Comparator返回值是三值的(即更高、更低或相等)。因此,比较坐标的顺序很重要 - 首先按 x 排序与先按 y 排序不同。

关于javascript - Guava 的 ComparisonChain 转换为 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43284351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com