Package org.optaplanner.core.impl.heuristic.selector.entity.mimic

## Class MimicRecordingEntitySelector

- java.lang.Object
- - org.optaplanner.core.impl.heuristic.selector.AbstractSelector
  - - org.optaplanner.core.impl.heuristic.selector.entity.AbstractEntitySelector
    - - org.optaplanner.core.impl.heuristic.selector.entity.mimic.MimicRecordingEntitySelector

- All Implemented Interfaces:
    `Iterable<Object>`, `EventListener`, `ListIterable<Object>`, `EntitySelector`, `EntityMimicRecorder`, `IterableSelector<Object>`, `ListIterableSelector<Object>`, `Selector`, `PhaseLifecycleListener`, `SolverLifecycleListener`

      public class MimicRecordingEntitySelector
      extends AbstractEntitySelector
      implements EntityMimicRecorder

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `protected EntitySelector` | `childEntitySelector` |
    `protected List<MimicReplayingEntitySelector>` | `replayingEntitySelectorList` |

    - ### Fields inherited from class org.optaplanner.core.impl.heuristic.selector.AbstractSelector

      `logger, phaseLifecycleSupport, workingRandom`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `MimicRecordingEntitySelector​(EntitySelector childEntitySelector)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `addMimicReplayingEntitySelector​(MimicReplayingEntitySelector replayingEntitySelector)` |
    `Iterator<Object>` | `endingIterator()` | If `Selector.isNeverEnding()` is true, then `Iterable.iterator()` will never end.
    `EntityDescriptor` | `getEntityDescriptor()` |
    `long` | `getSize()` | A random JIT `Selector` with `Selector.isNeverEnding()` true should return a size as if it would be able to return each distinct element only once, because the size can be used in `SelectionProbabilityWeightFactory`.
    `boolean` | `isCountable()` | If false, then `Selector.isNeverEnding()` is true.
    `boolean` | `isNeverEnding()` | Is true if `Selector.isCountable()` is false or if this selector is in random order (for most cases).
    `Iterator<Object>` | `iterator()` |
    `ListIterator<Object>` | `listIterator()` |
    `ListIterator<Object>` | `listIterator​(int index)` |
    `String` | `toString()` |

    - ### Methods inherited from class org.optaplanner.core.impl.heuristic.selector.AbstractSelector

      `getCacheType, phaseEnded, phaseStarted, solvingEnded, solvingStarted, stepEnded, stepStarted`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

    - ### Methods inherited from interface java.lang.Iterable

      `forEach, spliterator`

    - ### Methods inherited from interface org.optaplanner.core.impl.phase.event.PhaseLifecycleListener

      `phaseEnded, phaseStarted, stepEnded, stepStarted`

    - ### Methods inherited from interface org.optaplanner.core.impl.heuristic.selector.Selector

      `getCacheType`

    - ### Methods inherited from interface org.optaplanner.core.impl.solver.event.SolverLifecycleListener

      `solvingEnded, solvingStarted`

- - ### Field Detail

    - #### childEntitySelector

          protected final EntitySelector childEntitySelector

    - #### replayingEntitySelectorList

          protected final List<MimicReplayingEntitySelector> replayingEntitySelectorList

  - ### Constructor Detail

    - #### MimicRecordingEntitySelector

          public MimicRecordingEntitySelector​(EntitySelector childEntitySelector)

  - ### Method Detail

    - #### addMimicReplayingEntitySelector

          public void addMimicReplayingEntitySelector​(MimicReplayingEntitySelector replayingEntitySelector)

      Specified by:
        `addMimicReplayingEntitySelector` in interface `EntityMimicRecorder`
      Parameters:
        `replayingEntitySelector` - never null

    - #### getEntityDescriptor

          public EntityDescriptor getEntityDescriptor()

      Specified by:
        `getEntityDescriptor` in interface `EntityMimicRecorder`
      Specified by:
        `getEntityDescriptor` in interface `EntitySelector`
      Returns:
        As defined by `EntitySelector.getEntityDescriptor()`
      See Also:
        `EntitySelector.getEntityDescriptor()`

    - #### isCountable

          public boolean isCountable()

      Description copied from interface: `Selector`
      If false, then `Selector.isNeverEnding()` is true.
      Specified by:
        `isCountable` in interface `EntityMimicRecorder`
      Specified by:
        `isCountable` in interface `Selector`
      Returns:
        As defined by `Selector.isCountable()`
      See Also:
        `Selector.isCountable()`

    - #### isNeverEnding

          public boolean isNeverEnding()

      Description copied from interface: `Selector`
      Is true if `Selector.isCountable()` is false or if this selector is in random order (for most cases). Is never true when this selector is in shuffled order (which is less scalable but more exact).
      Specified by:
        `isNeverEnding` in interface `EntityMimicRecorder`
      Specified by:
        `isNeverEnding` in interface `Selector`
      Returns:
        As defined by `Selector.isNeverEnding()`
      See Also:
        `Selector.isNeverEnding()`

    - #### getSize

          public long getSize()

      Description copied from interface: `IterableSelector`
      A random JIT `Selector` with `Selector.isNeverEnding()` true should return a size as if it would be able to return each distinct element only once, because the size can be used in `SelectionProbabilityWeightFactory`.
      Specified by:
        `getSize` in interface `EntityMimicRecorder`
      Specified by:
        `getSize` in interface `IterableSelector<Object>`
      Returns:
        As defined by `IterableSelector.getSize()`
      See Also:
        `IterableSelector.getSize()`

    - #### iterator

          public Iterator<Object> iterator()

      Specified by:
        `iterator` in interface `Iterable<Object>`

    - #### endingIterator

          public Iterator<Object> endingIterator()

      Description copied from interface: `EntitySelector`
      If `Selector.isNeverEnding()` is true, then `Iterable.iterator()` will never end. This returns an ending `Iterator`, that tries to match `Iterable.iterator()` as much as possible, but returns each distinct element only once and returns every element that might possibly be selected and therefore it might not respect the configuration of this `EntitySelector` entirely.
      Specified by:
        `endingIterator` in interface `EntityMimicRecorder`
      Specified by:
        `endingIterator` in interface `EntitySelector`
      Returns:
        As defined by `EntitySelector.endingIterator()`
      See Also:
        `EntitySelector.endingIterator()`

    - #### listIterator

          public ListIterator<Object> listIterator()

      Specified by:
        `listIterator` in interface `ListIterable<Object>`
      Returns:
        never null, see `List.listIterator()`.
      See Also:
        `List.listIterator()`

    - #### listIterator

          public ListIterator<Object> listIterator​(int index)

      Specified by:
        `listIterator` in interface `ListIterable<Object>`
      Parameters:
        `index` - lower than the size of this `ListIterable`, see `List.listIterator(int)`.
      Returns:
        never null, see `List.listIterator(int)`.
      See Also:
        `List.listIterator()`

    - #### toString

          public String toString()

      Overrides:
        `toString` in class `Object`