|
49 | 49 | import java.util.ArrayList;
|
50 | 50 | import java.util.Arrays;
|
51 | 51 | import java.util.Collections;
|
52 |
| -import java.util.Comparator; |
53 | 52 | import java.util.List;
|
54 | 53 | import java.util.Objects;
|
55 | 54 | import java.util.PriorityQueue;
|
@@ -255,13 +254,11 @@ private static LeafSlice[] computeSlices(List<LeafReaderContext> leaves, int min
|
255 | 254 | // Make a copy so we can sort:
|
256 | 255 | List<LeafReaderContext> sortedLeaves = new ArrayList<>(leaves);
|
257 | 256 | // Sort by maxDoc, descending:
|
258 |
| - final Comparator<LeafReaderContext> leafComparator = Comparator.comparingInt(l -> l.reader().maxDoc()); |
259 |
| - sortedLeaves.sort(leafComparator.reversed()); |
| 257 | + sortedLeaves.sort((c1, c2) -> Integer.compare(c2.reader().maxDoc(), c1.reader().maxDoc())); |
260 | 258 | // we add the groups on a priority queue, so we can add orphan leafs to the smallest group
|
261 |
| - final Comparator<List<LeafReaderContext>> groupComparator = Comparator.comparingInt( |
262 |
| - l -> l.stream().mapToInt(lr -> lr.reader().maxDoc()).sum() |
| 259 | + final PriorityQueue<List<LeafReaderContext>> queue = new PriorityQueue<>( |
| 260 | + (c1, c2) -> Integer.compare(sumMaxDocValues(c1), sumMaxDocValues(c2)) |
263 | 261 | );
|
264 |
| - final PriorityQueue<List<LeafReaderContext>> queue = new PriorityQueue<>(groupComparator); |
265 | 262 | long docSum = 0;
|
266 | 263 | List<LeafReaderContext> group = new ArrayList<>();
|
267 | 264 | for (LeafReaderContext ctx : sortedLeaves) {
|
@@ -297,6 +294,14 @@ private static LeafSlice[] computeSlices(List<LeafReaderContext> leaves, int min
|
297 | 294 | return slices;
|
298 | 295 | }
|
299 | 296 |
|
| 297 | + private static int sumMaxDocValues(List<LeafReaderContext> l) { |
| 298 | + int sum = 0; |
| 299 | + for (LeafReaderContext lr : l) { |
| 300 | + sum += lr.reader().maxDoc(); |
| 301 | + } |
| 302 | + return sum; |
| 303 | + } |
| 304 | + |
300 | 305 | @Override
|
301 | 306 | public <C extends Collector, T> T search(Query query, CollectorManager<C, T> collectorManager) throws IOException {
|
302 | 307 | final C firstCollector = collectorManager.newCollector();
|
@@ -337,7 +342,7 @@ private <C extends Collector, T> T search(Weight weight, CollectorManager<C, T>
|
337 | 342 | throw new IllegalStateException("CollectorManager does not always produce collectors with the same score mode");
|
338 | 343 | }
|
339 | 344 | }
|
340 |
| - final List<Callable<C>> listTasks = new ArrayList<>(); |
| 345 | + final List<Callable<C>> listTasks = new ArrayList<>(leafSlices.length); |
341 | 346 | for (int i = 0; i < leafSlices.length; ++i) {
|
342 | 347 | final LeafReaderContext[] leaves = leafSlices[i].leaves;
|
343 | 348 | final C collector = collectors.get(i);
|
|
0 commit comments