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