## Uses of Interface
org.optaplanner.core.api.score.stream.quad.QuadConstraintStream

- Packages that use QuadConstraintStream
  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.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.quad |
  org.optaplanner.core.impl.score.stream.tri |

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

    Methods in org.optaplanner.core.api.score.stream.bi that return QuadConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `<GroupKeyA_,​GroupKeyB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​ResultC_,​ResultD_>` | BiConstraintStream.`groupBy​(BiFunction<A,​B,​GroupKeyA_> groupKeyAMapping, BiFunction<A,​B,​GroupKeyB_> groupKeyBMapping, BiConstraintCollector<A,​B,​ResultContainerC_,​ResultC_> collectorC, BiConstraintCollector<A,​B,​ResultContainerD_,​ResultD_> collectorD)` | Combines the semantics of `BiConstraintStream.groupBy(BiFunction, BiFunction)` and `BiConstraintStream.groupBy(BiConstraintCollector)`.

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

    Methods in org.optaplanner.core.api.score.stream.quad that return QuadConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `QuadConstraintStream<A,​B,​C,​D>` | QuadConstraintStream.`filter​(QuadPredicate<A,​B,​C,​D> predicate)` | Exhaustively test each tuple of facts against the `QuadPredicate` and match if `QuadPredicate.test(Object, Object, Object, Object)` returns true.
    `<GroupKeyA_,​GroupKeyB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​ResultC_,​ResultD_>` | QuadConstraintStream.`groupBy​(QuadFunction<A,​B,​C,​D,​GroupKeyA_> groupKeyAMapping, QuadFunction<A,​B,​C,​D,​GroupKeyB_> groupKeyBMapping, QuadConstraintCollector<A,​B,​C,​D,​ResultContainerC_,​ResultC_> collectorC, QuadConstraintCollector<A,​B,​C,​D,​ResultContainerD_,​ResultD_> collectorD)` | Combines the semantics of `groupBy(QuadFunction, QuadFunction)` and `groupBy(QuadConstraintCollector)`.
    `default <E> QuadConstraintStream<A,​B,​C,​D>` | QuadConstraintStream.`ifExists​(Class<E> otherClass, PentaJoiner<A,​B,​C,​D,​E> joiner)` | Create a new `BiConstraintStream` for every tuple of A, B, C and D where E exists for which the `PentaJoiner` is true (for the properties it extracts from the facts).
    `<E> QuadConstraintStream<A,​B,​C,​D>` | QuadConstraintStream.`ifExists​(Class<E> otherClass, PentaJoiner<A,​B,​C,​D,​E>... joiners)` | As defined by `ifExists(Class, PentaJoiner)`.
    `default <E> QuadConstraintStream<A,​B,​C,​D>` | QuadConstraintStream.`ifExists​(Class<E> otherClass, PentaJoiner<A,​B,​C,​D,​E> joiner1, PentaJoiner<A,​B,​C,​D,​E> joiner2)` | As defined by `ifExists(Class, PentaJoiner)`.
    `default <E> QuadConstraintStream<A,​B,​C,​D>` | QuadConstraintStream.`ifExists​(Class<E> otherClass, PentaJoiner<A,​B,​C,​D,​E> joiner1, PentaJoiner<A,​B,​C,​D,​E> joiner2, PentaJoiner<A,​B,​C,​D,​E> joiner3)` | As defined by `ifExists(Class, PentaJoiner)`.
    `default <E> QuadConstraintStream<A,​B,​C,​D>` | QuadConstraintStream.`ifExists​(Class<E> otherClass, PentaJoiner<A,​B,​C,​D,​E> joiner1, PentaJoiner<A,​B,​C,​D,​E> joiner2, PentaJoiner<A,​B,​C,​D,​E> joiner3, PentaJoiner<A,​B,​C,​D,​E> joiner4)` | As defined by `ifExists(Class, PentaJoiner)`.
    `default <E> QuadConstraintStream<A,​B,​C,​D>` | QuadConstraintStream.`ifNotExists​(Class<E> otherClass, PentaJoiner<A,​B,​C,​D,​E> joiner)` | Create a new `BiConstraintStream` for every tuple of A, B, C and D where E does not exist for which the `PentaJoiner` is true (for the properties it extracts from the facts).
    `<E> QuadConstraintStream<A,​B,​C,​D>` | QuadConstraintStream.`ifNotExists​(Class<E> otherClass, PentaJoiner<A,​B,​C,​D,​E>... joiners)` | As defined by `ifNotExists(Class, PentaJoiner)`.
    `default <E> QuadConstraintStream<A,​B,​C,​D>` | QuadConstraintStream.`ifNotExists​(Class<E> otherClass, PentaJoiner<A,​B,​C,​D,​E> joiner1, PentaJoiner<A,​B,​C,​D,​E> joiner2)` | As defined by `ifNotExists(Class, PentaJoiner)`.
    `default <E> QuadConstraintStream<A,​B,​C,​D>` | QuadConstraintStream.`ifNotExists​(Class<E> otherClass, PentaJoiner<A,​B,​C,​D,​E> joiner1, PentaJoiner<A,​B,​C,​D,​E> joiner2, PentaJoiner<A,​B,​C,​D,​E> joiner3)` | As defined by `ifNotExists(Class, PentaJoiner)`.
    `default <E> QuadConstraintStream<A,​B,​C,​D>` | QuadConstraintStream.`ifNotExists​(Class<E> otherClass, PentaJoiner<A,​B,​C,​D,​E> joiner1, PentaJoiner<A,​B,​C,​D,​E> joiner2, PentaJoiner<A,​B,​C,​D,​E> joiner3, PentaJoiner<A,​B,​C,​D,​E> joiner4)` | As defined by `ifNotExists(Class, PentaJoiner)`.

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

    Methods in org.optaplanner.core.api.score.stream.tri that return QuadConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `<GroupKeyA_,​GroupKeyB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​ResultC_,​ResultD_>` | TriConstraintStream.`groupBy​(TriFunction<A,​B,​C,​GroupKeyA_> groupKeyAMapping, TriFunction<A,​B,​C,​GroupKeyB_> groupKeyBMapping, TriConstraintCollector<A,​B,​C,​ResultContainerC_,​ResultC_> collectorC, TriConstraintCollector<A,​B,​C,​ResultContainerD_,​ResultD_> collectorD)` | Combines the semantics of `TriConstraintStream.groupBy(TriFunction, TriFunction)` and `TriConstraintStream.groupBy(TriConstraintCollector)`.
    `default <D> QuadConstraintStream<A,​B,​C,​D>` | TriConstraintStream.`join​(Class<D> otherClass)` | Create a new `QuadConstraintStream` for every combination of [A, B, C] and D.
    `default <D> QuadConstraintStream<A,​B,​C,​D>` | TriConstraintStream.`join​(Class<D> otherClass, QuadJoiner<A,​B,​C,​D> joiner)` | Create a new `QuadConstraintStream` for every combination of [A, B, C] and D for which the `QuadJoiner` is true (for the properties it extracts from all facts).
    `default <D> QuadConstraintStream<A,​B,​C,​D>` | TriConstraintStream.`join​(Class<D> otherClass, QuadJoiner<A,​B,​C,​D>... joiners)` | As defined by `TriConstraintStream.join(Class, QuadJoiner)`.
    `default <D> QuadConstraintStream<A,​B,​C,​D>` | TriConstraintStream.`join​(Class<D> otherClass, QuadJoiner<A,​B,​C,​D> joiner1, QuadJoiner<A,​B,​C,​D> joiner2)` | As defined by `TriConstraintStream.join(Class, QuadJoiner)`.
    `default <D> QuadConstraintStream<A,​B,​C,​D>` | TriConstraintStream.`join​(Class<D> otherClass, QuadJoiner<A,​B,​C,​D> joiner1, QuadJoiner<A,​B,​C,​D> joiner2, QuadJoiner<A,​B,​C,​D> joiner3)` | As defined by `TriConstraintStream.join(Class, QuadJoiner)`.
    `default <D> QuadConstraintStream<A,​B,​C,​D>` | TriConstraintStream.`join​(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 `TriConstraintStream.join(Class, QuadJoiner)`.
    `default <D> QuadConstraintStream<A,​B,​C,​D>` | TriConstraintStream.`join​(UniConstraintStream<D> otherStream)` | Create a new `QuadConstraintStream` for every combination of [A, B, C] and D.
    `<D> QuadConstraintStream<A,​B,​C,​D>` | TriConstraintStream.`join​(UniConstraintStream<D> otherStream, QuadJoiner<A,​B,​C,​D> joiner)` | Create a new `QuadConstraintStream` for every combination of [A, B] and C for which the `QuadJoiner` is true (for the properties it extracts from all facts).

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

    Methods in org.optaplanner.core.api.score.stream.uni that return QuadConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `<GroupKeyA_,​GroupKeyB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​ResultC_,​ResultD_>` | UniConstraintStream.`groupBy​(Function<A,​GroupKeyA_> groupKeyAMapping, Function<A,​GroupKeyB_> groupKeyBMapping, UniConstraintCollector<A,​ResultContainerC_,​ResultC_> collectorC, UniConstraintCollector<A,​ResultContainerD_,​ResultD_> collectorD)` | Combines the semantics of `UniConstraintStream.groupBy(Function, Function)` and `UniConstraintStream.groupBy(UniConstraintCollector)`.

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

    Methods in org.optaplanner.core.impl.score.stream.bavet.bi that return QuadConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `<GroupKeyA_,​GroupKeyB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​ResultC_,​ResultD_>` | BavetAbstractBiConstraintStream.`groupBy​(BiFunction<A,​B,​GroupKeyA_> groupKeyAMapping, BiFunction<A,​B,​GroupKeyB_> groupKeyBMapping, BiConstraintCollector<A,​B,​ResultContainerC_,​ResultC_> collectorC, BiConstraintCollector<A,​B,​ResultContainerD_,​ResultD_> collectorD)` |

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

    Methods in org.optaplanner.core.impl.score.stream.bavet.tri that return QuadConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `<GroupKeyA_,​GroupKeyB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​ResultC_,​ResultD_>` | BavetAbstractTriConstraintStream.`groupBy​(TriFunction<A,​B,​C,​GroupKeyA_> groupKeyAMapping, TriFunction<A,​B,​C,​GroupKeyB_> groupKeyBMapping, TriConstraintCollector<A,​B,​C,​ResultContainerC_,​ResultC_> collectorC, TriConstraintCollector<A,​B,​C,​ResultContainerD_,​ResultD_> collectorD)` |
    `<D> QuadConstraintStream<A,​B,​C,​D>` | BavetAbstractTriConstraintStream.`join​(UniConstraintStream<D> otherStream, QuadJoiner<A,​B,​C,​D> joiner)` |

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

    Methods in org.optaplanner.core.impl.score.stream.bavet.uni that return QuadConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `<GroupKeyA_,​GroupKeyB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​ResultC_,​ResultD_>` | BavetAbstractUniConstraintStream.`groupBy​(Function<A,​GroupKeyA_> groupKeyAMapping, Function<A,​GroupKeyB_> groupKeyBMapping, UniConstraintCollector<A,​ResultContainerC_,​ResultC_> collectorC, UniConstraintCollector<A,​ResultContainerD_,​ResultD_> collectorD)` |

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

    Methods in org.optaplanner.core.impl.score.stream.drools.bi that return QuadConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `<GroupKeyA_,​GroupKeyB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​ResultC_,​ResultD_>` | DroolsAbstractBiConstraintStream.`groupBy​(BiFunction<A,​B,​GroupKeyA_> groupKeyAMapping, BiFunction<A,​B,​GroupKeyB_> groupKeyBMapping, BiConstraintCollector<A,​B,​ResultContainerC_,​ResultC_> collectorC, BiConstraintCollector<A,​B,​ResultContainerD_,​ResultD_> collectorD)` |

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

    Classes in org.optaplanner.core.impl.score.stream.drools.quad that implement QuadConstraintStream
    Modifier and Type | Class | Description
    --- | --- | ---
    `class` | `DroolsAbstractQuadConstraintStream<Solution_,​A,​B,​C,​D>` |
    `class` | `DroolsExistsQuadConstraintStream<Solution_,​A,​B,​C,​D>` |
    `class` | `DroolsFilterQuadConstraintStream<Solution_,​A,​B,​C,​D>` |
    `class` | `DroolsGroupingQuadConstraintStream<Solution_,​NewA,​NewB,​NewC,​NewD>` |
    `class` | `DroolsJoinQuadConstraintStream<Solution_,​A,​B,​C,​D>` |
    `class` | `DroolsScoringQuadConstraintStream<Solution_,​A,​B,​C,​D>` |

    Methods in org.optaplanner.core.impl.score.stream.drools.quad that return QuadConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `QuadConstraintStream<A,​B,​C,​D>` | DroolsAbstractQuadConstraintStream.`filter​(QuadPredicate<A,​B,​C,​D> predicate)` |
    `<GroupKeyA_,​GroupKeyB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​ResultC_,​ResultD_>` | DroolsAbstractQuadConstraintStream.`groupBy​(QuadFunction<A,​B,​C,​D,​GroupKeyA_> groupKeyAMapping, QuadFunction<A,​B,​C,​D,​GroupKeyB_> groupKeyBMapping, QuadConstraintCollector<A,​B,​C,​D,​ResultContainerC_,​ResultC_> collectorC, QuadConstraintCollector<A,​B,​C,​D,​ResultContainerD_,​ResultD_> collectorD)` |
    `<E> QuadConstraintStream<A,​B,​C,​D>` | DroolsAbstractQuadConstraintStream.`ifExists​(Class<E> otherClass, PentaJoiner<A,​B,​C,​D,​E>... joiners)` |
    `<E> QuadConstraintStream<A,​B,​C,​D>` | DroolsAbstractQuadConstraintStream.`ifNotExists​(Class<E> otherClass, PentaJoiner<A,​B,​C,​D,​E>... joiners)` |

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

    Methods in org.optaplanner.core.impl.score.stream.drools.tri that return QuadConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `<GroupKeyA_,​GroupKeyB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​ResultC_,​ResultD_>` | DroolsAbstractTriConstraintStream.`groupBy​(TriFunction<A,​B,​C,​GroupKeyA_> groupKeyAMapping, TriFunction<A,​B,​C,​GroupKeyB_> groupKeyBMapping, TriConstraintCollector<A,​B,​C,​ResultContainerC_,​ResultC_> collectorC, TriConstraintCollector<A,​B,​C,​ResultContainerD_,​ResultD_> collectorD)` |
    `<D> QuadConstraintStream<A,​B,​C,​D>` | DroolsAbstractTriConstraintStream.`join​(UniConstraintStream<D> otherStream, QuadJoiner<A,​B,​C,​D> joiner)` |

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

    Methods in org.optaplanner.core.impl.score.stream.drools.uni that return QuadConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `<GroupKeyA_,​GroupKeyB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​ResultC_,​ResultD_>` | DroolsAbstractUniConstraintStream.`groupBy​(Function<A,​GroupKeyA_> groupKeyAMapping, Function<A,​GroupKeyB_> groupKeyBMapping, UniConstraintCollector<A,​ResultContainerC_,​ResultC_> collectorC, UniConstraintCollector<A,​ResultContainerD_,​ResultD_> collectorD)` |

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

    Subinterfaces of QuadConstraintStream in org.optaplanner.core.impl.score.stream.quad
    Modifier and Type | Interface | Description
    --- | --- | ---
    `interface` | `InnerQuadConstraintStream<A,​B,​C,​D>` |

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

    Methods in org.optaplanner.core.impl.score.stream.tri that return QuadConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `protected QuadConstraintStream<A,​B,​C,​D>` | TriConstraintStreamHelper.`doJoin​(Class<D> otherClass)` |
    `protected QuadConstraintStream<A,​B,​C,​D>` | TriConstraintStreamHelper.`doJoin​(Class<D> otherClass, QuadJoiner<A,​B,​C,​D> joiner)` |
    `protected QuadConstraintStream<A,​B,​C,​D>` | TriConstraintStreamHelper.`doJoin​(Class<D> otherClass, QuadJoiner<A,​B,​C,​D>... joiners)` |
    `protected QuadConstraintStream<A,​B,​C,​D>` | TriConstraintStreamHelper.`filter​(QuadConstraintStream<A,​B,​C,​D> stream, QuadPredicate<A,​B,​C,​D> predicate)` |

    Methods in org.optaplanner.core.impl.score.stream.tri with parameters of type QuadConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `protected QuadConstraintStream<A,​B,​C,​D>` | TriConstraintStreamHelper.`filter​(QuadConstraintStream<A,​B,​C,​D> stream, QuadPredicate<A,​B,​C,​D> predicate)` |