|
28 | 28 | import java.util.ArrayList; |
29 | 29 | import java.util.Collections; |
30 | 30 | import java.util.Comparator; |
| 31 | +import java.util.Iterator; |
31 | 32 | import java.util.LinkedList; |
32 | 33 | import java.util.List; |
33 | 34 | import java.util.Objects; |
@@ -190,52 +191,35 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws |
190 | 191 |
|
191 | 192 | @Override |
192 | 193 | public <T extends Bucket> Comparator<BucketAndOrd<T>> partiallyBuiltBucketComparator(Aggregator aggregator) { |
193 | | - List<Comparator<BucketAndOrd<T>>> comparators = new ArrayList<>(orderElements.size()); |
194 | | - for (BucketOrder order : orderElements) { |
195 | | - comparators.add(order.partiallyBuiltBucketComparator(aggregator)); |
| 194 | + Iterator<BucketOrder> iterator = orderElements.iterator(); |
| 195 | + Comparator<BucketAndOrd<T>> comparator = iterator.next().partiallyBuiltBucketComparator(aggregator); |
| 196 | + while (iterator.hasNext()) { |
| 197 | + comparator = comparator.thenComparing(iterator.next().partiallyBuiltBucketComparator(aggregator)); |
196 | 198 | } |
197 | | - return (lhs, rhs) -> { |
198 | | - for (Comparator<BucketAndOrd<T>> c : comparators) { |
199 | | - int result = c.compare(lhs, rhs); |
200 | | - if (result != 0) { |
201 | | - return result; |
202 | | - } |
203 | | - } |
204 | | - return 0; |
205 | | - }; |
| 199 | + return comparator; |
206 | 200 | } |
207 | 201 |
|
208 | 202 | @Override |
209 | 203 | public Comparator<Bucket> comparator() { |
210 | | - List<Comparator<Bucket>> comparators = orderElements.stream().map(BucketOrder::comparator).toList(); |
211 | | - return (lhs, rhs) -> { |
212 | | - for (Comparator<Bucket> c : comparators) { |
213 | | - int result = c.compare(lhs, rhs); |
214 | | - if (result != 0) { |
215 | | - return result; |
216 | | - } |
217 | | - } |
218 | | - return 0; |
219 | | - }; |
| 204 | + Iterator<BucketOrder> iterator = orderElements.iterator(); |
| 205 | + Comparator<Bucket> comparator = iterator.next().comparator(); |
| 206 | + while (iterator.hasNext()) { |
| 207 | + comparator = comparator.thenComparing(iterator.next().comparator()); |
| 208 | + } |
| 209 | + return comparator; |
220 | 210 | } |
221 | 211 |
|
222 | 212 | @Override |
223 | 213 | <B extends InternalMultiBucketAggregation.InternalBucket> Comparator<DelayedBucket<B>> delayedBucketComparator( |
224 | 214 | BiFunction<List<B>, AggregationReduceContext, B> reduce, |
225 | 215 | AggregationReduceContext reduceContext |
226 | 216 | ) { |
227 | | - List<Comparator<DelayedBucket<B>>> comparators = orderElements.stream() |
228 | | - .map(b -> b.delayedBucketComparator(reduce, reduceContext)) |
229 | | - .toList(); |
230 | | - return (lhs, rhs) -> { |
231 | | - for (Comparator<DelayedBucket<B>> c : comparators) { |
232 | | - int result = c.compare(lhs, rhs); |
233 | | - if (result != 0) { |
234 | | - return result; |
235 | | - } |
236 | | - } |
237 | | - return 0; |
238 | | - }; |
| 217 | + Iterator<BucketOrder> iterator = orderElements.iterator(); |
| 218 | + Comparator<DelayedBucket<B>> comparator = iterator.next().delayedBucketComparator(reduce, reduceContext); |
| 219 | + while (iterator.hasNext()) { |
| 220 | + comparator = comparator.thenComparing(iterator.next().delayedBucketComparator(reduce, reduceContext)); |
| 221 | + } |
| 222 | + return comparator; |
239 | 223 | } |
240 | 224 |
|
241 | 225 | @Override |
@@ -287,12 +271,13 @@ public Comparator<Bucket> comparator() { |
287 | 271 | return comparator; |
288 | 272 | } |
289 | 273 |
|
| 274 | + @SuppressWarnings({ "rawtypes", "unchecked" }) |
290 | 275 | @Override |
291 | 276 | <B extends InternalMultiBucketAggregation.InternalBucket> Comparator<DelayedBucket<B>> delayedBucketComparator( |
292 | 277 | BiFunction<List<B>, AggregationReduceContext, B> reduce, |
293 | 278 | AggregationReduceContext reduceContext |
294 | 279 | ) { |
295 | | - return delayedBucketCompator::compare; |
| 280 | + return (Comparator) delayedBucketCompator; |
296 | 281 | } |
297 | 282 |
|
298 | 283 | @Override |
|
0 commit comments