com.github.dakusui.jcunit8.factorspace.ParameterSpace Maven / Gradle / Ivy
package com.github.dakusui.jcunit8.factorspace;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;
public interface ParameterSpace {
List getParameterNames();
Parameter
getParameter(String name);
List getConstraints();
class Builder {
List parameters = new LinkedList<>();
List constraints = new LinkedList<>();
public Builder addParameter(Parameter parameter) {
this.parameters.add(parameter);
return this;
}
public Builder addAllParameters(Collection extends Parameter> parameters) {
parameters.forEach(Builder.this::addParameter);
return this;
}
public Builder addConstraint(Constraint constraint) {
this.constraints.add(constraint);
return this;
}
public Builder addAllConstraints(Collection extends Constraint> constraints) {
constraints.forEach(Builder.this::addConstraint);
return this;
}
public ParameterSpace build() {
return new ParameterSpace() {
@Override
public List getParameterNames() {
return parameters.stream().map(Parameter::getName).collect(Collectors.toList());
}
@Override
public Parameter
getParameter(String name) {
//noinspection unchecked,OptionalGetWithoutIsPresent
return (Parameter
) (parameters
.stream()
.filter(parameter -> parameter.getName().equals(name))
.findFirst().>get());
}
@Override
public List getConstraints() {
return Collections.unmodifiableList(constraints);
}
@Override
public String toString() {
return String.format("parameters:%s,constraints:%s", parameters, constraints);
}
};
}
}
}