diff --git a/other/java/client/src/main/java/seaweedfs/client/ReadChunks.java b/other/java/client/src/main/java/seaweedfs/client/ReadChunks.java index e563c0ccc..18826dd48 100644 --- a/other/java/client/src/main/java/seaweedfs/client/ReadChunks.java +++ b/other/java/client/src/main/java/seaweedfs/client/ReadChunks.java @@ -14,20 +14,23 @@ public class ReadChunks { points.add(new Point(chunk.getOffset(), chunk, true)); points.add(new Point(chunk.getOffset() + chunk.getSize(), chunk, false)); } + Collections.sort(points, new Comparator() { @Override public int compare(Point a, Point b) { - int x = (int) (a.x - b.x); - if (a.x != b.x) { - return (int) (a.x - b.x); - } - if (a.ts != b.ts) { - return (int) (a.ts - b.ts); + int xComparison = Long.compare(a.x, b.x); + if (xComparison != 0) { + return xComparison; } - if (!a.isStart) { - return -1; + + // If x values are equal, compare ts + int tsComparison = Long.compare(a.ts, b.ts); + if (tsComparison != 0) { + return tsComparison; } - return 1; + + // If both x and ts are equal, prioritize start points + return Boolean.compare(b.isStart, a.isStart); // b.isStart first to prioritize starts } });