diff --git a/modules/search-pipeline-common/src/main/java/org/opensearch/search/pipeline/common/SortResponseProcessor.java b/modules/search-pipeline-common/src/main/java/org/opensearch/search/pipeline/common/SortResponseProcessor.java index 7cdc00cbf4e25..afbce83f4b1aa 100644 --- a/modules/search-pipeline-common/src/main/java/org/opensearch/search/pipeline/common/SortResponseProcessor.java +++ b/modules/search-pipeline-common/src/main/java/org/opensearch/search/pipeline/common/SortResponseProcessor.java @@ -22,11 +22,11 @@ import org.opensearch.search.pipeline.Processor; import org.opensearch.search.pipeline.SearchResponseProcessor; -import java.util.ArrayList; -import java.util.Collections; +import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.stream.Collectors; /** * Processor that sorts an array of items. @@ -166,33 +166,21 @@ public SearchResponse processResponse(SearchRequest request, SearchResponse resp } private List getSortedValues(List values) { - // Downcast list elements to comparable (or throw exception) so we can sort - List> comparableValues = getComparableValues(values); - if (sortOrder.equals(SortOrder.ASCENDING)) { - Collections.sort(comparableValues); - } else { - Collections.sort(comparableValues, Collections.reverseOrder()); - } - // Upcast list elements back to Object - return List.copyOf(comparableValues); + return values.stream() + .map(this::downcastToComparable) + .sorted(sortOrder.equals(SortOrder.ASCENDING) ? Comparator.naturalOrder() : Comparator.reverseOrder()) + .collect(Collectors.toList()); } - private List> getComparableValues(List values) { - List> comparableValues = new ArrayList<>(values.size()); - for (Object obj : values) { - if (obj == null) { - throw new IllegalArgumentException("field [" + sortField + "] contains a null value.]"); - } else if (Comparable.class.isAssignableFrom(obj.getClass())) { - @SuppressWarnings("unchecked") - Comparable comp = (Comparable) obj; - comparableValues.add(comp); - } else { - throw new IllegalArgumentException( - "field [" + sortField + "] of type [" + obj.getClass().getName() + "] is not comparable.]" - ); - } + @SuppressWarnings("unchecked") + private Comparable downcastToComparable(Object obj) { + if (obj == null) { + throw new IllegalArgumentException("field [" + sortField + "] contains a null value.]"); + } else if (Comparable.class.isAssignableFrom(obj.getClass())) { + return (Comparable) obj; + } else { + throw new IllegalArgumentException("field [" + sortField + "] of type [" + obj.getClass().getName() + "] is not comparable.]"); } - return comparableValues; } static class Factory implements Processor.Factory {