PickFirstParentHandler.java

package net.bmahe.genetics4j.core.combination;

import java.util.List;
import java.util.Objects;

import net.bmahe.genetics4j.core.chromosomes.Chromosome;
import net.bmahe.genetics4j.core.spec.AbstractEAConfiguration;
import net.bmahe.genetics4j.core.spec.chromosome.ChromosomeSpec;
import net.bmahe.genetics4j.core.spec.combination.CombinationPolicy;
import net.bmahe.genetics4j.core.spec.combination.PickFirstParent;

public class PickFirstParentHandler<T extends Comparable<T>> implements ChromosomeCombinatorHandler<T> {

	@Override
	public boolean canHandle(final ChromosomeCombinatorResolver<T> chromosomeCombinatorResolver,
			final CombinationPolicy combinationPolicy, final ChromosomeSpec chromosome) {
		Objects.requireNonNull(combinationPolicy);

		return combinationPolicy instanceof PickFirstParent;

	}

	@Override
	public ChromosomeCombinator<T> resolve(final ChromosomeCombinatorResolver<T> chromosomeCombinatorResolver,
			final CombinationPolicy combinationPolicy, final ChromosomeSpec chromosome) {

		return new ChromosomeCombinator<>() {

			@Override
			public List<Chromosome> combine(final AbstractEAConfiguration<T> eaConfiguration, final Chromosome chromosome1,
					final T firstParentFitness, final Chromosome chromosome2, final T secondParentFitness) {
				Objects.requireNonNull(chromosome1);

				return List.of(chromosome1);
			}
		};
	}
}