SLING-8483 - Streamlined the Iterator into Ordered List handling
diff --git a/src/main/java/org/apache/sling/feature/launcher/impl/FeatureProcessor.java b/src/main/java/org/apache/sling/feature/launcher/impl/FeatureProcessor.java
index 2fd5bc7..5607f2d 100644
--- a/src/main/java/org/apache/sling/feature/launcher/impl/FeatureProcessor.java
+++ b/src/main/java/org/apache/sling/feature/launcher/impl/FeatureProcessor.java
@@ -22,6 +22,7 @@
import java.net.URL;
import java.util.ArrayList;
import java.util.Comparator;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.ServiceLoader;
@@ -165,13 +166,13 @@
}
extensions: for(final Extension ext : app.getExtensions()) {
- List<ExtensionHandler> extensionHandlerList = new ArrayList<>();
- for (ExtensionHandler handler : ServiceLoader.load(ExtensionHandler.class, FeatureProcessor.class.getClassLoader())) {
- extensionHandlerList.add(handler);
- }
- List<ExtensionHandler> prioritizedExtensionHandlerList = extensionHandlerList.stream()
- .sorted(Comparator.comparingInt(ExtensionHandler::getPriority).reversed())
- .collect(Collectors.toList());
+ Iterator<ExtensionHandler> i = ServiceLoader.load(ExtensionHandler.class, FeatureProcessor.class.getClassLoader()).iterator();
+ // Stream the iterator, sort them based on Priority in reversed order and then collection into a list
+ List<ExtensionHandler> prioritizedExtensionHandlerList =
+ StreamSupport
+ .stream(Spliterators.spliteratorUnknownSize(i, Spliterator.ORDERED), false)
+ .sorted(Comparator.comparingInt(ExtensionHandler::getPriority).reversed())
+ .collect(Collectors.toList());
for (ExtensionHandler handler : prioritizedExtensionHandlerList)
{
if (handler.handle(new ExtensionContextImpl(ctx, config.getInstallation(), loadedFeatures), ext)) {