ich einige Code JavaScript von Java bin konvertieren, und ich habe in diesem Code kommen:Guava der ComparisonChain Umwandlung in 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);
scheint fair genug, da es die resultierende Aufgabe der passenden zurückkehren werden Vergleichskette.
Aber was ich nicht verstehe, ist, dass beide Methoden meiner naiven Augen scheinen genau die gleiche Sache zu tun: zurück, wenn entweder die x
oder y
Eigenschaften entsprechen. Der einzige Unterschied besteht darin, dass zuerst die Eigenschaft x
zuerst geprüft wird, d. H. Die Reihenfolge der Prüfungen ist unterschiedlich.
Auch, wenn das stimmt, dann die Arrays.binarySearch
Methode wird ypoints
Elemente mit gleichen x
Eigenschaften zurückgeben. Ich denke nicht, dass dies die Aufgabe ist.
So würde meine JavaScript Übersetzung sein:
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;
}
Aber diese beiden zu return (p1.y === p2.y || p1.x === p2.x) ? p1 : undefined;
vereinfacht werden könnten.
Ich glaube, ich bin sicherlich falsch verstanden, wie ComparisonChain
funktioniert. Ist die Reihenfolge der Kette wichtig? Bonuspunkte für Anweisungen, wie dies in JavaScript übersetzt werden kann.
Diese Komparatoren unterscheiden, wie sie vergleichen '(1, 2) 'to' (2, 1) '. 'compareXCoord' sagt' (1, 2) <(2, 1) 'und' compareYCoord' sagt '(1, 2)> (2, 1)'. –