1 package net.bmahe.genetics4j.neat.combination.parentcompare;
2
3 import java.util.Objects;
4 import java.util.Optional;
5 import java.util.ServiceLoader;
6 import java.util.ServiceLoader.Provider;
7
8 import net.bmahe.genetics4j.neat.spec.combination.parentcompare.ParentComparisonPolicy;
9
10 public class ParentComparisonHandlerLocator {
11
12 private final ServiceLoader<ParentComparisonHandler> parentComparisonHandlerServices;
13
14 public ParentComparisonHandlerLocator() {
15
16 parentComparisonHandlerServices = ServiceLoader.load(ParentComparisonHandler.class);
17 }
18
19 public Optional<ParentComparisonHandler> find(final ParentComparisonPolicy parentComparisonPolicy) {
20 Objects.requireNonNull(parentComparisonPolicy);
21
22 return parentComparisonHandlerServices.stream()
23 .map(Provider::get)
24 .filter(parentComparisonHandler -> parentComparisonHandler.canHandle(parentComparisonPolicy))
25 .findFirst();
26 }
27 }