ParentComparisonHandlerLocator.java
package net.bmahe.genetics4j.neat.combination.parentcompare;
import java.util.Objects;
import java.util.Optional;
import java.util.ServiceLoader;
import java.util.ServiceLoader.Provider;
import net.bmahe.genetics4j.neat.spec.combination.parentcompare.ParentComparisonPolicy;
public class ParentComparisonHandlerLocator {
private final ServiceLoader<ParentComparisonHandler> parentComparisonHandlerServices;
public ParentComparisonHandlerLocator() {
parentComparisonHandlerServices = ServiceLoader.load(ParentComparisonHandler.class);
}
public Optional<ParentComparisonHandler> find(final ParentComparisonPolicy parentComparisonPolicy) {
Objects.requireNonNull(parentComparisonPolicy);
return parentComparisonHandlerServices.stream()
.map(Provider::get)
.filter(parentComparisonHandler -> parentComparisonHandler.canHandle(parentComparisonPolicy))
.findFirst();
}
}