## Uses of Interface
org.optaplanner.core.api.score.stream.tri.TriConstraintStream

- Packages that use TriConstraintStream
  Package | Description
  --- | ---
  org.optaplanner.core.api.score.stream.bi | The `ConstraintStream` API for bi-tuples.
  org.optaplanner.core.api.score.stream.quad | The `ConstraintStream` API for four matched facts.
  org.optaplanner.core.api.score.stream.tri | The `ConstraintStream` API for tri-tuples.
  org.optaplanner.core.api.score.stream.uni | The `ConstraintStream` API for uni-tuples.
  org.optaplanner.core.impl.score.stream.bavet.bi |
  org.optaplanner.core.impl.score.stream.bavet.tri |
  org.optaplanner.core.impl.score.stream.bavet.uni |
  org.optaplanner.core.impl.score.stream.bi |
  org.optaplanner.core.impl.score.stream.drools.bi |
  org.optaplanner.core.impl.score.stream.drools.quad |
  org.optaplanner.core.impl.score.stream.drools.tri |
  org.optaplanner.core.impl.score.stream.drools.uni |
  org.optaplanner.core.impl.score.stream.tri |

- - ### Uses of TriConstraintStream in org.optaplanner.core.api.score.stream.bi

    Methods in org.optaplanner.core.api.score.stream.bi that return TriConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `<GroupKey_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_> TriConstraintStream<GroupKey_,​ResultB_,​ResultC_>` | BiConstraintStream.`groupBy​(BiFunction<A,​B,​GroupKey_> groupKeyMapping, BiConstraintCollector<A,​B,​ResultContainerB_,​ResultB_> collectorB, BiConstraintCollector<A,​B,​ResultContainerC_,​ResultC_> collectorC)` | Convert the `BiConstraintStream` to a `TriConstraintStream`, consisting of unique tuples with three facts.
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_> TriConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_>` | BiConstraintStream.`groupBy​(BiFunction<A,​B,​GroupKeyA_> groupKeyAMapping, BiFunction<A,​B,​GroupKeyB_> groupKeyBMapping, BiFunction<A,​B,​GroupKeyC_> groupKeyCMapping)` | Convert the `BiConstraintStream` to a `TriConstraintStream`, consisting of unique tuples with three facts.
    `<GroupKeyA_,​GroupKeyB_,​ResultContainer_,​Result_> TriConstraintStream<GroupKeyA_,​GroupKeyB_,​Result_>` | BiConstraintStream.`groupBy​(BiFunction<A,​B,​GroupKeyA_> groupKeyAMapping, BiFunction<A,​B,​GroupKeyB_> groupKeyBMapping, BiConstraintCollector<A,​B,​ResultContainer_,​Result_> collector)` | Combines the semantics of `BiConstraintStream.groupBy(BiFunction, BiFunction)` and `BiConstraintStream.groupBy(BiConstraintCollector)`.
    `<ResultContainerA_,​ResultA_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_> TriConstraintStream<ResultA_,​ResultB_,​ResultC_>` | BiConstraintStream.`groupBy​(BiConstraintCollector<A,​B,​ResultContainerA_,​ResultA_> collectorA, BiConstraintCollector<A,​B,​ResultContainerB_,​ResultB_> collectorB, BiConstraintCollector<A,​B,​ResultContainerC_,​ResultC_> collectorC)` | Convert the `BiConstraintStream` to a `TriConstraintStream`, containing only a single tuple, the result of applying three `BiConstraintCollector`s.
    `default <C> TriConstraintStream<A,​B,​C>` | BiConstraintStream.`join​(Class<C> otherClass)` | Create a new `TriConstraintStream` for every combination of [A, B] and C.
    `default <C> TriConstraintStream<A,​B,​C>` | BiConstraintStream.`join​(Class<C> otherClass, TriJoiner<A,​B,​C> joiner)` | Create a new `TriConstraintStream` for every combination of [A, B] and C for which the `TriJoiner` is true (for the properties it extracts from both facts).
    `default <C> TriConstraintStream<A,​B,​C>` | BiConstraintStream.`join​(Class<C> otherClass, TriJoiner<A,​B,​C>... joiners)` | As defined by `BiConstraintStream.join(Class, TriJoiner)`.
    `default <C> TriConstraintStream<A,​B,​C>` | BiConstraintStream.`join​(Class<C> otherClass, TriJoiner<A,​B,​C> joiner1, TriJoiner<A,​B,​C> joiner2)` | As defined by `BiConstraintStream.join(Class, TriJoiner)`.
    `default <C> TriConstraintStream<A,​B,​C>` | BiConstraintStream.`join​(Class<C> otherClass, TriJoiner<A,​B,​C> joiner1, TriJoiner<A,​B,​C> joiner2, TriJoiner<A,​B,​C> joiner3)` | As defined by `BiConstraintStream.join(Class, TriJoiner)`.
    `default <C> TriConstraintStream<A,​B,​C>` | BiConstraintStream.`join​(Class<C> otherClass, TriJoiner<A,​B,​C> joiner1, TriJoiner<A,​B,​C> joiner2, TriJoiner<A,​B,​C> joiner3, TriJoiner<A,​B,​C> joiner4)` | As defined by `BiConstraintStream.join(Class, TriJoiner)`.
    `default <C> TriConstraintStream<A,​B,​C>` | BiConstraintStream.`join​(UniConstraintStream<C> otherStream)` | Create a new `TriConstraintStream` for every combination of [A, B] and C.
    `<C> TriConstraintStream<A,​B,​C>` | BiConstraintStream.`join​(UniConstraintStream<C> otherStream, TriJoiner<A,​B,​C> joiner)` | Create a new `TriConstraintStream` for every combination of [A, B] and C for which the `TriJoiner` is true (for the properties it extracts from both facts).
    `default <C> TriConstraintStream<A,​B,​C>` | BiConstraintStream.`join​(UniConstraintStream<C> otherStream, TriJoiner<A,​B,​C>... joiners)` | As defined by `BiConstraintStream.join(Class, TriJoiner)`.
    `default <C> TriConstraintStream<A,​B,​C>` | BiConstraintStream.`join​(UniConstraintStream<C> otherStream, TriJoiner<A,​B,​C> joiner1, TriJoiner<A,​B,​C> joiner2)` | As defined by `BiConstraintStream.join(Class, TriJoiner)`.
    `default <C> TriConstraintStream<A,​B,​C>` | BiConstraintStream.`join​(UniConstraintStream<C> otherStream, TriJoiner<A,​B,​C> joiner1, TriJoiner<A,​B,​C> joiner2, TriJoiner<A,​B,​C> joiner3)` | As defined by `BiConstraintStream.join(Class, TriJoiner)`.
    `default <C> TriConstraintStream<A,​B,​C>` | BiConstraintStream.`join​(UniConstraintStream<C> otherStream, TriJoiner<A,​B,​C> joiner1, TriJoiner<A,​B,​C> joiner2, TriJoiner<A,​B,​C> joiner3, TriJoiner<A,​B,​C> joiner4)` | As defined by `BiConstraintStream.join(Class, TriJoiner)`.

  - ### Uses of TriConstraintStream in org.optaplanner.core.api.score.stream.quad

    Methods in org.optaplanner.core.api.score.stream.quad that return TriConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `<GroupKey_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_> TriConstraintStream<GroupKey_,​ResultB_,​ResultC_>` | QuadConstraintStream.`groupBy​(QuadFunction<A,​B,​C,​D,​GroupKey_> groupKeyMapping, QuadConstraintCollector<A,​B,​C,​D,​ResultContainerB_,​ResultB_> collectorB, QuadConstraintCollector<A,​B,​C,​D,​ResultContainerC_,​ResultC_> collectorC)` | Convert the `QuadConstraintStream` to a `TriConstraintStream`, consisting of unique tuples with three facts.
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_> TriConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_>` | QuadConstraintStream.`groupBy​(QuadFunction<A,​B,​C,​D,​GroupKeyA_> groupKeyAMapping, QuadFunction<A,​B,​C,​D,​GroupKeyB_> groupKeyBMapping, QuadFunction<A,​B,​C,​D,​GroupKeyC_> groupKeyCMapping)` | Convert the `QuadConstraintStream` to a `TriConstraintStream`, consisting of unique tuples with three facts.
    `<GroupKeyA_,​GroupKeyB_,​ResultContainer_,​Result_> TriConstraintStream<GroupKeyA_,​GroupKeyB_,​Result_>` | QuadConstraintStream.`groupBy​(QuadFunction<A,​B,​C,​D,​GroupKeyA_> groupKeyAMapping, QuadFunction<A,​B,​C,​D,​GroupKeyB_> groupKeyBMapping, QuadConstraintCollector<A,​B,​C,​D,​ResultContainer_,​Result_> collector)` | Combines the semantics of `QuadConstraintStream.groupBy(QuadFunction, QuadFunction)` and `QuadConstraintStream.groupBy(QuadConstraintCollector)`.
    `<ResultContainerA_,​ResultA_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_> TriConstraintStream<ResultA_,​ResultB_,​ResultC_>` | QuadConstraintStream.`groupBy​(QuadConstraintCollector<A,​B,​C,​D,​ResultContainerA_,​ResultA_> collectorA, QuadConstraintCollector<A,​B,​C,​D,​ResultContainerB_,​ResultB_> collectorB, QuadConstraintCollector<A,​B,​C,​D,​ResultContainerC_,​ResultC_> collectorC)` | Convert the `QuadConstraintStream` to a `TriConstraintStream`, containing only a single tuple, the result of applying three `QuadConstraintCollector`s.

  - ### Uses of TriConstraintStream in org.optaplanner.core.api.score.stream.tri

    Methods in org.optaplanner.core.api.score.stream.tri that return TriConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `TriConstraintStream<A,​B,​C>` | TriConstraintStream.`distinct()` | Removes duplicate tuples from the stream, according to the tuple's facts {@link Object#equals(Object)equals}/hashcode methods, such that only distinct tuples remain.
    `TriConstraintStream<A,​B,​C>` | TriConstraintStream.`filter​(TriPredicate<A,​B,​C> predicate)` | Exhaustively test each tuple of facts against the `TriPredicate` and match if `TriPredicate.test(Object, Object, Object)` returns true.
    `<ResultC_> TriConstraintStream<A,​B,​ResultC_>` | TriConstraintStream.`flattenLast​(Function<C,​Iterable<ResultC_>> mapping)` | As defined by `BiConstraintStream.flattenLast(Function)`.
    `<GroupKey_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_> TriConstraintStream<GroupKey_,​ResultB_,​ResultC_>` | TriConstraintStream.`groupBy​(TriFunction<A,​B,​C,​GroupKey_> groupKeyMapping, TriConstraintCollector<A,​B,​C,​ResultContainerB_,​ResultB_> collectorB, TriConstraintCollector<A,​B,​C,​ResultContainerC_,​ResultC_> collectorC)` | Convert the `TriConstraintStream` to a `TriConstraintStream`, consisting of unique tuples with three facts.
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_> TriConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_>` | TriConstraintStream.`groupBy​(TriFunction<A,​B,​C,​GroupKeyA_> groupKeyAMapping, TriFunction<A,​B,​C,​GroupKeyB_> groupKeyBMapping, TriFunction<A,​B,​C,​GroupKeyC_> groupKeyCMapping)` | Convert the `TriConstraintStream` to a `TriConstraintStream`, consisting of unique tuples with three facts.
    `<GroupKeyA_,​GroupKeyB_,​ResultContainer_,​Result_> TriConstraintStream<GroupKeyA_,​GroupKeyB_,​Result_>` | TriConstraintStream.`groupBy​(TriFunction<A,​B,​C,​GroupKeyA_> groupKeyAMapping, TriFunction<A,​B,​C,​GroupKeyB_> groupKeyBMapping, TriConstraintCollector<A,​B,​C,​ResultContainer_,​Result_> collector)` | Combines the semantics of `groupBy(TriFunction, TriFunction)` and `groupBy(TriConstraintCollector)`.
    `<ResultContainerA_,​ResultA_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_> TriConstraintStream<ResultA_,​ResultB_,​ResultC_>` | TriConstraintStream.`groupBy​(TriConstraintCollector<A,​B,​C,​ResultContainerA_,​ResultA_> collectorA, TriConstraintCollector<A,​B,​C,​ResultContainerB_,​ResultB_> collectorB, TriConstraintCollector<A,​B,​C,​ResultContainerC_,​ResultC_> collectorC)` | Convert the `TriConstraintStream` to a `TriConstraintStream`, containing only a single tuple, the result of applying three `TriConstraintCollector`s.
    `default <D> TriConstraintStream<A,​B,​C>` | TriConstraintStream.`ifExists​(Class<D> otherClass, QuadJoiner<A,​B,​C,​D> joiner)` | Create a new `BiConstraintStream` for every tuple of A, B and C where D exists for which the `QuadJoiner` is true (for the properties it extracts from the facts).
    `<D> TriConstraintStream<A,​B,​C>` | TriConstraintStream.`ifExists​(Class<D> otherClass, QuadJoiner<A,​B,​C,​D>... joiners)` | As defined by `ifExists(Class, QuadJoiner)`.
    `default <D> TriConstraintStream<A,​B,​C>` | TriConstraintStream.`ifExists​(Class<D> otherClass, QuadJoiner<A,​B,​C,​D> joiner1, QuadJoiner<A,​B,​C,​D> joiner2)` | As defined by `ifExists(Class, QuadJoiner)`.
    `default <D> TriConstraintStream<A,​B,​C>` | TriConstraintStream.`ifExists​(Class<D> otherClass, QuadJoiner<A,​B,​C,​D> joiner1, QuadJoiner<A,​B,​C,​D> joiner2, QuadJoiner<A,​B,​C,​D> joiner3)` | As defined by `ifExists(Class, QuadJoiner)`.
    `default <D> TriConstraintStream<A,​B,​C>` | TriConstraintStream.`ifExists​(Class<D> otherClass, QuadJoiner<A,​B,​C,​D> joiner1, QuadJoiner<A,​B,​C,​D> joiner2, QuadJoiner<A,​B,​C,​D> joiner3, QuadJoiner<A,​B,​C,​D> joiner4)` | As defined by `ifExists(Class, QuadJoiner)`.
    `default <D> TriConstraintStream<A,​B,​C>` | TriConstraintStream.`ifNotExists​(Class<D> otherClass, QuadJoiner<A,​B,​C,​D> joiner)` | Create a new `BiConstraintStream` for every tuple of A, B and C where D does not exist for which the `QuadJoiner` is true (for the properties it extracts from the facts).
    `<D> TriConstraintStream<A,​B,​C>` | TriConstraintStream.`ifNotExists​(Class<D> otherClass, QuadJoiner<A,​B,​C,​D>... joiners)` | As defined by `ifNotExists(Class, QuadJoiner)`.
    `default <D> TriConstraintStream<A,​B,​C>` | TriConstraintStream.`ifNotExists​(Class<D> otherClass, QuadJoiner<A,​B,​C,​D> joiner1, QuadJoiner<A,​B,​C,​D> joiner2)` | As defined by `ifNotExists(Class, QuadJoiner)`.
    `default <D> TriConstraintStream<A,​B,​C>` | TriConstraintStream.`ifNotExists​(Class<D> otherClass, QuadJoiner<A,​B,​C,​D> joiner1, QuadJoiner<A,​B,​C,​D> joiner2, QuadJoiner<A,​B,​C,​D> joiner3)` | As defined by `ifNotExists(Class, QuadJoiner)`.
    `default <D> TriConstraintStream<A,​B,​C>` | TriConstraintStream.`ifNotExists​(Class<D> otherClass, QuadJoiner<A,​B,​C,​D> joiner1, QuadJoiner<A,​B,​C,​D> joiner2, QuadJoiner<A,​B,​C,​D> joiner3, QuadJoiner<A,​B,​C,​D> joiner4)` | As defined by `ifNotExists(Class, QuadJoiner)`.

  - ### Uses of TriConstraintStream in org.optaplanner.core.api.score.stream.uni

    Methods in org.optaplanner.core.api.score.stream.uni that return TriConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `<GroupKey_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_> TriConstraintStream<GroupKey_,​ResultB_,​ResultC_>` | UniConstraintStream.`groupBy​(Function<A,​GroupKey_> groupKeyMapping, UniConstraintCollector<A,​ResultContainerB_,​ResultB_> collectorB, UniConstraintCollector<A,​ResultContainerC_,​ResultC_> collectorC)` | Convert the `UniConstraintStream` to a `TriConstraintStream`, consisting of unique tuples with three facts.
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_> TriConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_>` | UniConstraintStream.`groupBy​(Function<A,​GroupKeyA_> groupKeyAMapping, Function<A,​GroupKeyB_> groupKeyBMapping, Function<A,​GroupKeyC_> groupKeyCMapping)` | Convert the `UniConstraintStream` to a `TriConstraintStream`, consisting of unique tuples with three facts.
    `<GroupKeyA_,​GroupKeyB_,​ResultContainer_,​Result_> TriConstraintStream<GroupKeyA_,​GroupKeyB_,​Result_>` | UniConstraintStream.`groupBy​(Function<A,​GroupKeyA_> groupKeyAMapping, Function<A,​GroupKeyB_> groupKeyBMapping, UniConstraintCollector<A,​ResultContainer_,​Result_> collector)` | Combines the semantics of `UniConstraintStream.groupBy(Function, Function)` and `UniConstraintStream.groupBy(UniConstraintCollector)`.
    `<ResultContainerA_,​ResultA_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_> TriConstraintStream<ResultA_,​ResultB_,​ResultC_>` | UniConstraintStream.`groupBy​(UniConstraintCollector<A,​ResultContainerA_,​ResultA_> collectorA, UniConstraintCollector<A,​ResultContainerB_,​ResultB_> collectorB, UniConstraintCollector<A,​ResultContainerC_,​ResultC_> collectorC)` | Convert the `UniConstraintStream` to a `TriConstraintStream`, containing only a single tuple, the result of applying three `UniConstraintCollector`s.

  - ### Uses of TriConstraintStream in org.optaplanner.core.impl.score.stream.bavet.bi

    Methods in org.optaplanner.core.impl.score.stream.bavet.bi that return TriConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `<GroupKey_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_> TriConstraintStream<GroupKey_,​ResultB_,​ResultC_>` | BavetAbstractBiConstraintStream.`groupBy​(BiFunction<A,​B,​GroupKey_> groupKeyMapping, BiConstraintCollector<A,​B,​ResultContainerB_,​ResultB_> collectorB, BiConstraintCollector<A,​B,​ResultContainerC_,​ResultC_> collectorC)` |
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_> TriConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_>` | BavetAbstractBiConstraintStream.`groupBy​(BiFunction<A,​B,​GroupKeyA_> groupKeyAMapping, BiFunction<A,​B,​GroupKeyB_> groupKeyBMapping, BiFunction<A,​B,​GroupKeyC_> groupKeyCMapping)` |
    `<GroupKeyA_,​GroupKeyB_,​ResultContainer_,​Result_> TriConstraintStream<GroupKeyA_,​GroupKeyB_,​Result_>` | BavetAbstractBiConstraintStream.`groupBy​(BiFunction<A,​B,​GroupKeyA_> groupKeyAMapping, BiFunction<A,​B,​GroupKeyB_> groupKeyBMapping, BiConstraintCollector<A,​B,​ResultContainer_,​Result_> collector)` |
    `<ResultContainerA_,​ResultA_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_> TriConstraintStream<ResultA_,​ResultB_,​ResultC_>` | BavetAbstractBiConstraintStream.`groupBy​(BiConstraintCollector<A,​B,​ResultContainerA_,​ResultA_> collectorA, BiConstraintCollector<A,​B,​ResultContainerB_,​ResultB_> collectorB, BiConstraintCollector<A,​B,​ResultContainerC_,​ResultC_> collectorC)` |
    `<C> TriConstraintStream<A,​B,​C>` | BavetAbstractBiConstraintStream.`join​(UniConstraintStream<C> otherStream, TriJoiner<A,​B,​C> joiner)` |

  - ### Uses of TriConstraintStream in org.optaplanner.core.impl.score.stream.bavet.tri

    Classes in org.optaplanner.core.impl.score.stream.bavet.tri that implement TriConstraintStream
    Modifier and Type | Class | Description
    --- | --- | ---
    `class` | `BavetAbstractTriConstraintStream<Solution_,​A,​B,​C>` |
    `class` | `BavetFilterTriConstraintStream<Solution_,​A,​B,​C>` |
    `class` | `BavetJoinTriConstraintStream<Solution_,​A,​B,​C>` |
    `class` | `BavetScoringTriConstraintStream<Solution_,​A,​B,​C>` |

    Methods in org.optaplanner.core.impl.score.stream.bavet.tri that return TriConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `<ResultC_> TriConstraintStream<A,​B,​ResultC_>` | BavetAbstractTriConstraintStream.`flattenLast​(Function<C,​Iterable<ResultC_>> mapping)` |
    `<GroupKey_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_> TriConstraintStream<GroupKey_,​ResultB_,​ResultC_>` | BavetAbstractTriConstraintStream.`groupBy​(TriFunction<A,​B,​C,​GroupKey_> groupKeyMapping, TriConstraintCollector<A,​B,​C,​ResultContainerB_,​ResultB_> collectorB, TriConstraintCollector<A,​B,​C,​ResultContainerC_,​ResultC_> collectorC)` |
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_> TriConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_>` | BavetAbstractTriConstraintStream.`groupBy​(TriFunction<A,​B,​C,​GroupKeyA_> groupKeyAMapping, TriFunction<A,​B,​C,​GroupKeyB_> groupKeyBMapping, TriFunction<A,​B,​C,​GroupKeyC_> groupKeyCMapping)` |
    `<GroupKeyA_,​GroupKeyB_,​ResultContainer_,​Result_> TriConstraintStream<GroupKeyA_,​GroupKeyB_,​Result_>` | BavetAbstractTriConstraintStream.`groupBy​(TriFunction<A,​B,​C,​GroupKeyA_> groupKeyAMapping, TriFunction<A,​B,​C,​GroupKeyB_> groupKeyBMapping, TriConstraintCollector<A,​B,​C,​ResultContainer_,​Result_> collector)` |
    `<ResultContainerA_,​ResultA_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_> TriConstraintStream<ResultA_,​ResultB_,​ResultC_>` | BavetAbstractTriConstraintStream.`groupBy​(TriConstraintCollector<A,​B,​C,​ResultContainerA_,​ResultA_> collectorA, TriConstraintCollector<A,​B,​C,​ResultContainerB_,​ResultB_> collectorB, TriConstraintCollector<A,​B,​C,​ResultContainerC_,​ResultC_> collectorC)` |
    `<D> TriConstraintStream<A,​B,​C>` | BavetAbstractTriConstraintStream.`ifExists​(Class<D> otherClass, QuadJoiner<A,​B,​C,​D>... joiners)` |
    `<D> TriConstraintStream<A,​B,​C>` | BavetAbstractTriConstraintStream.`ifNotExists​(Class<D> otherClass, QuadJoiner<A,​B,​C,​D>... joiners)` |

  - ### Uses of TriConstraintStream in org.optaplanner.core.impl.score.stream.bavet.uni

    Methods in org.optaplanner.core.impl.score.stream.bavet.uni that return TriConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `<GroupKey_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_> TriConstraintStream<GroupKey_,​ResultB_,​ResultC_>` | BavetAbstractUniConstraintStream.`groupBy​(Function<A,​GroupKey_> groupKeyMapping, UniConstraintCollector<A,​ResultContainerB_,​ResultB_> collectorB, UniConstraintCollector<A,​ResultContainerC_,​ResultC_> collectorC)` |
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_> TriConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_>` | BavetAbstractUniConstraintStream.`groupBy​(Function<A,​GroupKeyA_> groupKeyAMapping, Function<A,​GroupKeyB_> groupKeyBMapping, Function<A,​GroupKeyC_> groupKeyCMapping)` |
    `<GroupKeyA_,​GroupKeyB_,​ResultContainer_,​Result_> TriConstraintStream<GroupKeyA_,​GroupKeyB_,​Result_>` | BavetAbstractUniConstraintStream.`groupBy​(Function<A,​GroupKeyA_> groupKeyAMapping, Function<A,​GroupKeyB_> groupKeyBMapping, UniConstraintCollector<A,​ResultContainer_,​Result_> collector)` |
    `<ResultContainerA_,​ResultA_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_> TriConstraintStream<ResultA_,​ResultB_,​ResultC_>` | BavetAbstractUniConstraintStream.`groupBy​(UniConstraintCollector<A,​ResultContainerA_,​ResultA_> collectorA, UniConstraintCollector<A,​ResultContainerB_,​ResultB_> collectorB, UniConstraintCollector<A,​ResultContainerC_,​ResultC_> collectorC)` |

  - ### Uses of TriConstraintStream in org.optaplanner.core.impl.score.stream.bi

    Methods in org.optaplanner.core.impl.score.stream.bi that return TriConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `protected TriConstraintStream<A,​B,​C>` | BiConstraintStreamHelper.`doJoin​(UniConstraintStream<C> otherStream)` |
    `protected TriConstraintStream<A,​B,​C>` | BiConstraintStreamHelper.`doJoin​(UniConstraintStream<C> otherStream, TriJoiner<A,​B,​C> joiner)` |
    `protected TriConstraintStream<A,​B,​C>` | BiConstraintStreamHelper.`doJoin​(UniConstraintStream<C> otherStream, TriJoiner<A,​B,​C>... joiners)` |
    `protected TriConstraintStream<A,​B,​C>` | BiConstraintStreamHelper.`filter​(TriConstraintStream<A,​B,​C> stream, TriPredicate<A,​B,​C> predicate)` |

    Methods in org.optaplanner.core.impl.score.stream.bi with parameters of type TriConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `protected TriConstraintStream<A,​B,​C>` | BiConstraintStreamHelper.`filter​(TriConstraintStream<A,​B,​C> stream, TriPredicate<A,​B,​C> predicate)` |

  - ### Uses of TriConstraintStream in org.optaplanner.core.impl.score.stream.drools.bi

    Methods in org.optaplanner.core.impl.score.stream.drools.bi that return TriConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `<GroupKey_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_> TriConstraintStream<GroupKey_,​ResultB_,​ResultC_>` | DroolsAbstractBiConstraintStream.`groupBy​(BiFunction<A,​B,​GroupKey_> groupKeyMapping, BiConstraintCollector<A,​B,​ResultContainerB_,​ResultB_> collectorB, BiConstraintCollector<A,​B,​ResultContainerC_,​ResultC_> collectorC)` |
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_> TriConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_>` | DroolsAbstractBiConstraintStream.`groupBy​(BiFunction<A,​B,​GroupKeyA_> groupKeyAMapping, BiFunction<A,​B,​GroupKeyB_> groupKeyBMapping, BiFunction<A,​B,​GroupKeyC_> groupKeyCMapping)` |
    `<GroupKeyA_,​GroupKeyB_,​ResultContainer_,​Result_> TriConstraintStream<GroupKeyA_,​GroupKeyB_,​Result_>` | DroolsAbstractBiConstraintStream.`groupBy​(BiFunction<A,​B,​GroupKeyA_> groupKeyAMapping, BiFunction<A,​B,​GroupKeyB_> groupKeyBMapping, BiConstraintCollector<A,​B,​ResultContainer_,​Result_> collector)` |
    `<ResultContainerA_,​ResultA_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_> TriConstraintStream<ResultA_,​ResultB_,​ResultC_>` | DroolsAbstractBiConstraintStream.`groupBy​(BiConstraintCollector<A,​B,​ResultContainerA_,​ResultA_> collectorA, BiConstraintCollector<A,​B,​ResultContainerB_,​ResultB_> collectorB, BiConstraintCollector<A,​B,​ResultContainerC_,​ResultC_> collectorC)` |
    `<C> TriConstraintStream<A,​B,​C>` | DroolsAbstractBiConstraintStream.`join​(UniConstraintStream<C> otherStream, TriJoiner<A,​B,​C> joiner)` |

  - ### Uses of TriConstraintStream in org.optaplanner.core.impl.score.stream.drools.quad

    Methods in org.optaplanner.core.impl.score.stream.drools.quad that return TriConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `<GroupKey_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_> TriConstraintStream<GroupKey_,​ResultB_,​ResultC_>` | DroolsAbstractQuadConstraintStream.`groupBy​(QuadFunction<A,​B,​C,​D,​GroupKey_> groupKeyMapping, QuadConstraintCollector<A,​B,​C,​D,​ResultContainerB_,​ResultB_> collectorB, QuadConstraintCollector<A,​B,​C,​D,​ResultContainerC_,​ResultC_> collectorC)` |
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_> TriConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_>` | DroolsAbstractQuadConstraintStream.`groupBy​(QuadFunction<A,​B,​C,​D,​GroupKeyA_> groupKeyAMapping, QuadFunction<A,​B,​C,​D,​GroupKeyB_> groupKeyBMapping, QuadFunction<A,​B,​C,​D,​GroupKeyC_> groupKeyCMapping)` |
    `<GroupKeyA_,​GroupKeyB_,​ResultContainer_,​Result_> TriConstraintStream<GroupKeyA_,​GroupKeyB_,​Result_>` | DroolsAbstractQuadConstraintStream.`groupBy​(QuadFunction<A,​B,​C,​D,​GroupKeyA_> groupKeyAMapping, QuadFunction<A,​B,​C,​D,​GroupKeyB_> groupKeyBMapping, QuadConstraintCollector<A,​B,​C,​D,​ResultContainer_,​Result_> collector)` |
    `<ResultContainerA_,​ResultA_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_> TriConstraintStream<ResultA_,​ResultB_,​ResultC_>` | DroolsAbstractQuadConstraintStream.`groupBy​(QuadConstraintCollector<A,​B,​C,​D,​ResultContainerA_,​ResultA_> collectorA, QuadConstraintCollector<A,​B,​C,​D,​ResultContainerB_,​ResultB_> collectorB, QuadConstraintCollector<A,​B,​C,​D,​ResultContainerC_,​ResultC_> collectorC)` |

  - ### Uses of TriConstraintStream in org.optaplanner.core.impl.score.stream.drools.tri

    Classes in org.optaplanner.core.impl.score.stream.drools.tri that implement TriConstraintStream
    Modifier and Type | Class | Description
    --- | --- | ---
    `class` | `DroolsAbstractTriConstraintStream<Solution_,​A,​B,​C>` |
    `class` | `DroolsExistsTriConstraintStream<Solution_,​A,​B,​C>` |
    `class` | `DroolsFilterTriConstraintStream<Solution_,​A,​B,​C>` |
    `class` | `DroolsFlatteningTriConstraintStream<Solution_,​A,​B,​NewC>` |
    `class` | `DroolsGroupingTriConstraintStream<Solution_,​NewA,​NewB,​NewC>` |
    `class` | `DroolsJoinTriConstraintStream<Solution_,​A,​B,​C>` |

    Methods in org.optaplanner.core.impl.score.stream.drools.tri that return TriConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `TriConstraintStream<A,​B,​C>` | DroolsAbstractTriConstraintStream.`filter​(TriPredicate<A,​B,​C> predicate)` |
    `<ResultC_> TriConstraintStream<A,​B,​ResultC_>` | DroolsAbstractTriConstraintStream.`flattenLast​(Function<C,​Iterable<ResultC_>> mapping)` |
    `<GroupKey_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_> TriConstraintStream<GroupKey_,​ResultB_,​ResultC_>` | DroolsAbstractTriConstraintStream.`groupBy​(TriFunction<A,​B,​C,​GroupKey_> groupKeyMapping, TriConstraintCollector<A,​B,​C,​ResultContainerB_,​ResultB_> collectorB, TriConstraintCollector<A,​B,​C,​ResultContainerC_,​ResultC_> collectorC)` |
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_> TriConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_>` | DroolsAbstractTriConstraintStream.`groupBy​(TriFunction<A,​B,​C,​GroupKeyA_> groupKeyAMapping, TriFunction<A,​B,​C,​GroupKeyB_> groupKeyBMapping, TriFunction<A,​B,​C,​GroupKeyC_> groupKeyCMapping)` |
    `<GroupKeyA_,​GroupKeyB_,​ResultContainer_,​Result_> TriConstraintStream<GroupKeyA_,​GroupKeyB_,​Result_>` | DroolsAbstractTriConstraintStream.`groupBy​(TriFunction<A,​B,​C,​GroupKeyA_> groupKeyAMapping, TriFunction<A,​B,​C,​GroupKeyB_> groupKeyBMapping, TriConstraintCollector<A,​B,​C,​ResultContainer_,​Result_> collector)` |
    `<ResultContainerA_,​ResultA_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_> TriConstraintStream<ResultA_,​ResultB_,​ResultC_>` | DroolsAbstractTriConstraintStream.`groupBy​(TriConstraintCollector<A,​B,​C,​ResultContainerA_,​ResultA_> collectorA, TriConstraintCollector<A,​B,​C,​ResultContainerB_,​ResultB_> collectorB, TriConstraintCollector<A,​B,​C,​ResultContainerC_,​ResultC_> collectorC)` |
    `<D> TriConstraintStream<A,​B,​C>` | DroolsAbstractTriConstraintStream.`ifExists​(Class<D> otherClass, QuadJoiner<A,​B,​C,​D>... joiners)` |
    `<D> TriConstraintStream<A,​B,​C>` | DroolsAbstractTriConstraintStream.`ifNotExists​(Class<D> otherClass, QuadJoiner<A,​B,​C,​D>... joiners)` |

  - ### Uses of TriConstraintStream in org.optaplanner.core.impl.score.stream.drools.uni

    Methods in org.optaplanner.core.impl.score.stream.drools.uni that return TriConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `<GroupKey_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_> TriConstraintStream<GroupKey_,​ResultB_,​ResultC_>` | DroolsAbstractUniConstraintStream.`groupBy​(Function<A,​GroupKey_> groupKeyMapping, UniConstraintCollector<A,​ResultContainerB_,​ResultB_> collectorB, UniConstraintCollector<A,​ResultContainerC_,​ResultC_> collectorC)` |
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_> TriConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_>` | DroolsAbstractUniConstraintStream.`groupBy​(Function<A,​GroupKeyA_> groupKeyAMapping, Function<A,​GroupKeyB_> groupKeyBMapping, Function<A,​GroupKeyC_> groupKeyCMapping)` |
    `<GroupKeyA_,​GroupKeyB_,​ResultContainer_,​Result_> TriConstraintStream<GroupKeyA_,​GroupKeyB_,​Result_>` | DroolsAbstractUniConstraintStream.`groupBy​(Function<A,​GroupKeyA_> groupKeyAMapping, Function<A,​GroupKeyB_> groupKeyBMapping, UniConstraintCollector<A,​ResultContainer_,​Result_> collector)` |
    `<ResultContainerA_,​ResultA_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_> TriConstraintStream<ResultA_,​ResultB_,​ResultC_>` | DroolsAbstractUniConstraintStream.`groupBy​(UniConstraintCollector<A,​ResultContainerA_,​ResultA_> collectorA, UniConstraintCollector<A,​ResultContainerB_,​ResultB_> collectorB, UniConstraintCollector<A,​ResultContainerC_,​ResultC_> collectorC)` |

  - ### Uses of TriConstraintStream in org.optaplanner.core.impl.score.stream.tri

    Subinterfaces of TriConstraintStream in org.optaplanner.core.impl.score.stream.tri
    Modifier and Type | Interface | Description
    --- | --- | ---
    `interface` | `InnerTriConstraintStream<A,​B,​C>` |

    Methods in org.optaplanner.core.impl.score.stream.tri that return TriConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `default TriConstraintStream<A,​B,​C>` | InnerTriConstraintStream.`distinct()` |

    Constructors in org.optaplanner.core.impl.score.stream.tri with parameters of type TriConstraintStream
    Constructor | Description
    --- | ---
    `TriConstraintStreamHelper​(TriConstraintStream<A,​B,​C> stream)` |