All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.dakusui.jcunit.fsm.Parameters Maven / Gradle / Ivy

package com.github.dakusui.jcunit.fsm;

import com.github.dakusui.jcunit8.factorspace.Factor;

import java.util.*;
import java.util.stream.Collectors;

import static java.util.Objects.requireNonNull;

public interface Parameters extends Iterable {
  Parameters EMPTY = new Parameters() {
    @Override
    public List values() {
      return Collections.emptyList();
    }

    @Override
    public int size() {
      return values().size();
    }

    @Override
    public Factor get(int i) {
      throw new NoSuchElementException();
    }

    @Override
    public Iterator iterator() {
      return Collections.emptyList().iterator();
    }
  };

  List values();

  int size();

  Factor get(int i);

  class Builder {
    private final String name;
    private List parameters = new LinkedList<>();

    public Builder(String name) {
      this.name = requireNonNull(name);
    }

    public Builder add(Object... levels) {
      parameters.add(Factor.create(
          String.format("%s-p%d", this.name, parameters.size()),
          levels
      ));
      return this;
    }

    public Parameters build() {
      return new Parameters() {
        @Override
        public Iterator iterator() {
          return parameters.iterator();
        }

        @Override
        public List values() {
          return parameters.stream().map(Factor::getLevels).collect(Collectors.toList());
        }

        @Override
        public int size() {
          return parameters.size();
        }

        @Override
        public Factor get(int i) {
          return parameters.get(i);
        }
      };
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy