Package org.optaplanner.core.impl.score.stream

## Interface InnerConstraintFactory<Solution_>

- All Superinterfaces:
    `ConstraintFactory`
  All Known Implementing Classes:
    `BavetConstraintFactory`, `DroolsConstraintFactory`

      public interface InnerConstraintFactory<Solution_>
      extends ConstraintFactory

- - ### Method Summary

    All Methods Instance Methods Abstract Methods Default Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `ConstraintSessionFactory<Solution_>` | `buildSessionFactory​(Constraint[] constraints)` | This method is thread-safe.
    `default <A> UniConstraintStream<A>` | `from​(Class<A> fromClass)` | Start a `ConstraintStream` of all instances of the fromClass that are known as `problem facts` or `planning entities`.
    `default <A> BiConstraintStream<A,​A>` | `fromUniquePair​(Class<A> fromClass, BiJoiner<A,​A> joiner)` | Create a new `BiConstraintStream` for every unique combination of A and another A with a higher `PlanningId` for which the `BiJoiner` is true (for the properties it extracts from both facts).
    `SolutionDescriptor<Solution_>` | `getSolutionDescriptor()` |

    - ### Methods inherited from interface org.optaplanner.core.api.score.stream.ConstraintFactory

      `fromUnfiltered, fromUniquePair, fromUniquePair, fromUniquePair, fromUniquePair, fromUniquePair, getDefaultConstraintPackage`

- - ### Method Detail

    - #### from

          default <A> UniConstraintStream<A> from​(Class<A> fromClass)

      Description copied from interface: `ConstraintFactory`
      Start a `ConstraintStream` of all instances of the fromClass that are known as `problem facts` or `planning entities`.

      If the fromClass is a `PlanningEntity`, then it will be automatically `filtered` to only contain fully initialized entities, for which each genuine `PlanningVariable` (of the fromClass or a superclass thereof) is initialized (so when the value is not null - unless `PlanningVariable.nullable()` is modified). This filtering will NOT automatically apply to genuine planning variables of subclass planning entities of the fromClass.

      Specified by:
        `from` in interface `ConstraintFactory`
      Type Parameters:
        `A` - the type of the matched problem fact or `planning entity`
      Parameters:
        `fromClass` - never null
      Returns:
        never null

    - #### fromUniquePair

          default <A> BiConstraintStream<A,​A> fromUniquePair​(Class<A> fromClass,
                                                                   BiJoiner<A,​A> joiner)

      Description copied from interface: `ConstraintFactory`
      Create a new `BiConstraintStream` for every unique combination of A and another A with a higher `PlanningId` for which the `BiJoiner` is true (for the properties it extracts from both facts).

      Important: This is faster and more scalable than not using a `ConstraintFactory.fromUniquePair(Class)` joiner} followed by a `filter`, because it applies hashing and/or indexing on the properties, so it doesn't create nor checks almost every combination of A and A.

      This method is syntactic sugar for `UniConstraintStream.join(Class, BiJoiner)`. It automatically adds a `lessThan` joiner on the `PlanningId` of A.

      This method has overloaded methods with multiple `BiJoiner` parameters.

      Specified by:
        `fromUniquePair` in interface `ConstraintFactory`
      Type Parameters:
        `A` - the type of the matched problem fact or `planning entity`
      Parameters:
        `fromClass` - never null
        `joiner` - never null
      Returns:
        a stream that matches every unique combination of A and another A for which the `BiJoiner` is true

    - #### buildSessionFactory

          ConstraintSessionFactory<Solution_> buildSessionFactory​(Constraint[] constraints)

      This method is thread-safe.
      Parameters:
        `constraints` - never null
      Returns:
        never null

    - #### getSolutionDescriptor

          SolutionDescriptor<Solution_> getSolutionDescriptor()

      Returns:
        never null