## 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
    --- | --- | ---
    `<GroupKey_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKey_,​ResultB_,​ResultC_,​ResultD_>` | BiConstraintStream.`groupBy​(BiFunction<A,​B,​GroupKey_> groupKeyMapping, BiConstraintCollector<A,​B,​ResultContainerB_,​ResultB_> collectorB, BiConstraintCollector<A,​B,​ResultContainerC_,​ResultC_> collectorC, BiConstraintCollector<A,​B,​ResultContainerD_,​ResultD_> collectorD)` | Convert the `BiConstraintStream` to a `QuadConstraintStream`, consisting of unique tuples with four facts.
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​GroupKeyD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​GroupKeyD_>` | BiConstraintStream.`groupBy​(BiFunction<A,​B,​GroupKeyA_> groupKeyAMapping, BiFunction<A,​B,​GroupKeyB_> groupKeyBMapping, BiFunction<A,​B,​GroupKeyC_> groupKeyCMapping, BiFunction<A,​B,​GroupKeyD_> groupKeyDMapping)` | Convert the `BiConstraintStream` to a `QuadConstraintStream`, consisting of unique tuples with four facts.
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​ResultD_>` | BiConstraintStream.`groupBy​(BiFunction<A,​B,​GroupKeyA_> groupKeyAMapping, BiFunction<A,​B,​GroupKeyB_> groupKeyBMapping, BiFunction<A,​B,​GroupKeyC_> groupKeyCMapping, BiConstraintCollector<A,​B,​ResultContainerD_,​ResultD_> collectorD)` | Combines the semantics of `BiConstraintStream.groupBy(BiFunction, BiFunction)` and `BiConstraintStream.groupBy(BiConstraintCollector)`.
    `<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)`.
    `<ResultContainerA_,​ResultA_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<ResultA_,​ResultB_,​ResultC_,​ResultD_>` | BiConstraintStream.`groupBy​(BiConstraintCollector<A,​B,​ResultContainerA_,​ResultA_> collectorA, BiConstraintCollector<A,​B,​ResultContainerB_,​ResultB_> collectorB, BiConstraintCollector<A,​B,​ResultContainerC_,​ResultC_> collectorC, BiConstraintCollector<A,​B,​ResultContainerD_,​ResultD_> collectorD)` | Convert the `BiConstraintStream` to a `QuadConstraintStream`, containing only a single tuple, the result of applying four `BiConstraintCollector`s.

  - ### 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.`distinct()` | Transforms the stream in such a way that all the tuples going through it are distinct.
    `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.
    `<GroupKey_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKey_,​ResultB_,​ResultC_,​ResultD_>` | 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, QuadConstraintCollector<A,​B,​C,​D,​ResultContainerD_,​ResultD_> collectorD)` | Convert the `QuadConstraintStream` to a `QuadConstraintStream`, consisting of unique tuples with four facts.
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​GroupKeyD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​GroupKeyD_>` | QuadConstraintStream.`groupBy​(QuadFunction<A,​B,​C,​D,​GroupKeyA_> groupKeyAMapping, QuadFunction<A,​B,​C,​D,​GroupKeyB_> groupKeyBMapping, QuadFunction<A,​B,​C,​D,​GroupKeyC_> groupKeyCMapping, QuadFunction<A,​B,​C,​D,​GroupKeyD_> groupKeyDMapping)` | Convert the `TriConstraintStream` to a `QuadConstraintStream`, consisting of unique tuples with four facts.
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​ResultD_>` | QuadConstraintStream.`groupBy​(QuadFunction<A,​B,​C,​D,​GroupKeyA_> groupKeyAMapping, QuadFunction<A,​B,​C,​D,​GroupKeyB_> groupKeyBMapping, QuadFunction<A,​B,​C,​D,​GroupKeyC_> groupKeyCMapping, QuadConstraintCollector<A,​B,​C,​D,​ResultContainerD_,​ResultD_> collectorD)` | Combines the semantics of `groupBy(QuadFunction, QuadFunction)` and `groupBy(QuadConstraintCollector)`.
    `<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)`.
    `<ResultContainerA_,​ResultA_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<ResultA_,​ResultB_,​ResultC_,​ResultD_>` | 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, QuadConstraintCollector<A,​B,​C,​D,​ResultContainerD_,​ResultD_> collectorD)` | Convert the `QuadConstraintStream` to a `QuadConstraintStream`, containing only a single tuple, the result of applying four `QuadConstraintCollector`s.
    `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
    --- | --- | ---
    `<GroupKey_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKey_,​ResultB_,​ResultC_,​ResultD_>` | TriConstraintStream.`groupBy​(TriFunction<A,​B,​C,​GroupKey_> groupKeyMapping, TriConstraintCollector<A,​B,​C,​ResultContainerB_,​ResultB_> collectorB, TriConstraintCollector<A,​B,​C,​ResultContainerC_,​ResultC_> collectorC, TriConstraintCollector<A,​B,​C,​ResultContainerD_,​ResultD_> collectorD)` | Convert the `TriConstraintStream` to a `QuadConstraintStream`, consisting of unique tuples with four facts.
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​GroupKeyD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​GroupKeyD_>` | TriConstraintStream.`groupBy​(TriFunction<A,​B,​C,​GroupKeyA_> groupKeyAMapping, TriFunction<A,​B,​C,​GroupKeyB_> groupKeyBMapping, TriFunction<A,​B,​C,​GroupKeyC_> groupKeyCMapping, TriFunction<A,​B,​C,​GroupKeyD_> groupKeyDMapping)` | Convert the `TriConstraintStream` to a `QuadConstraintStream`, consisting of unique tuples with four facts.
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​ResultD_>` | TriConstraintStream.`groupBy​(TriFunction<A,​B,​C,​GroupKeyA_> groupKeyAMapping, TriFunction<A,​B,​C,​GroupKeyB_> groupKeyBMapping, TriFunction<A,​B,​C,​GroupKeyC_> groupKeyCMapping, TriConstraintCollector<A,​B,​C,​ResultContainerD_,​ResultD_> collectorD)` | Combines the semantics of `TriConstraintStream.groupBy(TriFunction, TriFunction)` and `TriConstraintStream.groupBy(TriConstraintCollector)`.
    `<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)`.
    `<ResultContainerA_,​ResultA_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<ResultA_,​ResultB_,​ResultC_,​ResultD_>` | TriConstraintStream.`groupBy​(TriConstraintCollector<A,​B,​C,​ResultContainerA_,​ResultA_> collectorA, TriConstraintCollector<A,​B,​C,​ResultContainerB_,​ResultB_> collectorB, TriConstraintCollector<A,​B,​C,​ResultContainerC_,​ResultC_> collectorC, TriConstraintCollector<A,​B,​C,​ResultContainerD_,​ResultD_> collectorD)` | Convert the `TriConstraintStream` to a `QuadConstraintStream`, containing only a single tuple, the result of applying four `TriConstraintCollector`s.
    `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).
    `default <D> QuadConstraintStream<A,​B,​C,​D>` | TriConstraintStream.`join​(UniConstraintStream<D> otherStream, QuadJoiner<A,​B,​C,​D>... joiners)` | As defined by `TriConstraintStream.join(Class, QuadJoiner)`.
    `default <D> QuadConstraintStream<A,​B,​C,​D>` | TriConstraintStream.`join​(UniConstraintStream<D> otherStream, 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​(UniConstraintStream<D> otherStream, 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​(UniConstraintStream<D> otherStream, 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)`.

  - ### 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
    --- | --- | ---
    `<GroupKey_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKey_,​ResultB_,​ResultC_,​ResultD_>` | UniConstraintStream.`groupBy​(Function<A,​GroupKey_> groupKeyMapping, UniConstraintCollector<A,​ResultContainerB_,​ResultB_> collectorB, UniConstraintCollector<A,​ResultContainerC_,​ResultC_> collectorC, UniConstraintCollector<A,​ResultContainerD_,​ResultD_> collectorD)` | Convert the `UniConstraintStream` to a `QuadConstraintStream`, consisting of unique tuples with four facts.
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​GroupKeyD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​GroupKeyD_>` | UniConstraintStream.`groupBy​(Function<A,​GroupKeyA_> groupKeyAMapping, Function<A,​GroupKeyB_> groupKeyBMapping, Function<A,​GroupKeyC_> groupKeyCMapping, Function<A,​GroupKeyD_> groupKeyDMapping)` | Convert the `UniConstraintStream` to a `QuadConstraintStream`, consisting of unique tuples with four facts.
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​ResultD_>` | UniConstraintStream.`groupBy​(Function<A,​GroupKeyA_> groupKeyAMapping, Function<A,​GroupKeyB_> groupKeyBMapping, Function<A,​GroupKeyC_> groupKeyCMapping, UniConstraintCollector<A,​ResultContainerD_,​ResultD_> collectorD)` | Combines the semantics of `UniConstraintStream.groupBy(Function, Function)` and `UniConstraintStream.groupBy(UniConstraintCollector)`.
    `<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)`.
    `<ResultContainerA_,​ResultA_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<ResultA_,​ResultB_,​ResultC_,​ResultD_>` | UniConstraintStream.`groupBy​(UniConstraintCollector<A,​ResultContainerA_,​ResultA_> collectorA, UniConstraintCollector<A,​ResultContainerB_,​ResultB_> collectorB, UniConstraintCollector<A,​ResultContainerC_,​ResultC_> collectorC, UniConstraintCollector<A,​ResultContainerD_,​ResultD_> collectorD)` | Convert the `UniConstraintStream` to a `QuadConstraintStream`, containing only a single tuple, the result of applying four `UniConstraintCollector`s.

  - ### 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
    --- | --- | ---
    `<GroupKey_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKey_,​ResultB_,​ResultC_,​ResultD_>` | BavetAbstractBiConstraintStream.`groupBy​(BiFunction<A,​B,​GroupKey_> groupKeyMapping, BiConstraintCollector<A,​B,​ResultContainerB_,​ResultB_> collectorB, BiConstraintCollector<A,​B,​ResultContainerC_,​ResultC_> collectorC, BiConstraintCollector<A,​B,​ResultContainerD_,​ResultD_> collectorD)` |
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​GroupKeyD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​GroupKeyD_>` | BavetAbstractBiConstraintStream.`groupBy​(BiFunction<A,​B,​GroupKeyA_> groupKeyAMapping, BiFunction<A,​B,​GroupKeyB_> groupKeyBMapping, BiFunction<A,​B,​GroupKeyC_> groupKeyCMapping, BiFunction<A,​B,​GroupKeyD_> groupKeyDMapping)` |
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​ResultD_>` | BavetAbstractBiConstraintStream.`groupBy​(BiFunction<A,​B,​GroupKeyA_> groupKeyAMapping, BiFunction<A,​B,​GroupKeyB_> groupKeyBMapping, BiFunction<A,​B,​GroupKeyC_> groupKeyCMapping, BiConstraintCollector<A,​B,​ResultContainerD_,​ResultD_> collectorD)` |
    `<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)` |
    `<ResultContainerA_,​ResultA_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<ResultA_,​ResultB_,​ResultC_,​ResultD_>` | BavetAbstractBiConstraintStream.`groupBy​(BiConstraintCollector<A,​B,​ResultContainerA_,​ResultA_> collectorA, BiConstraintCollector<A,​B,​ResultContainerB_,​ResultB_> collectorB, 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
    --- | --- | ---
    `<GroupKey_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKey_,​ResultB_,​ResultC_,​ResultD_>` | BavetAbstractTriConstraintStream.`groupBy​(TriFunction<A,​B,​C,​GroupKey_> groupKeyMapping, TriConstraintCollector<A,​B,​C,​ResultContainerB_,​ResultB_> collectorB, TriConstraintCollector<A,​B,​C,​ResultContainerC_,​ResultC_> collectorC, TriConstraintCollector<A,​B,​C,​ResultContainerD_,​ResultD_> collectorD)` |
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​GroupKeyD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​GroupKeyD_>` | BavetAbstractTriConstraintStream.`groupBy​(TriFunction<A,​B,​C,​GroupKeyA_> groupKeyAMapping, TriFunction<A,​B,​C,​GroupKeyB_> groupKeyBMapping, TriFunction<A,​B,​C,​GroupKeyC_> groupKeyCMapping, TriFunction<A,​B,​C,​GroupKeyD_> groupKeyDMapping)` |
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​ResultD_>` | BavetAbstractTriConstraintStream.`groupBy​(TriFunction<A,​B,​C,​GroupKeyA_> groupKeyAMapping, TriFunction<A,​B,​C,​GroupKeyB_> groupKeyBMapping, TriFunction<A,​B,​C,​GroupKeyC_> groupKeyCMapping, TriConstraintCollector<A,​B,​C,​ResultContainerD_,​ResultD_> collectorD)` |
    `<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)` |
    `<ResultContainerA_,​ResultA_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<ResultA_,​ResultB_,​ResultC_,​ResultD_>` | BavetAbstractTriConstraintStream.`groupBy​(TriConstraintCollector<A,​B,​C,​ResultContainerA_,​ResultA_> collectorA, TriConstraintCollector<A,​B,​C,​ResultContainerB_,​ResultB_> collectorB, 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
    --- | --- | ---
    `<GroupKey_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKey_,​ResultB_,​ResultC_,​ResultD_>` | BavetAbstractUniConstraintStream.`groupBy​(Function<A,​GroupKey_> groupKeyMapping, UniConstraintCollector<A,​ResultContainerB_,​ResultB_> collectorB, UniConstraintCollector<A,​ResultContainerC_,​ResultC_> collectorC, UniConstraintCollector<A,​ResultContainerD_,​ResultD_> collectorD)` |
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​GroupKeyD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​GroupKeyD_>` | BavetAbstractUniConstraintStream.`groupBy​(Function<A,​GroupKeyA_> groupKeyAMapping, Function<A,​GroupKeyB_> groupKeyBMapping, Function<A,​GroupKeyC_> groupKeyCMapping, Function<A,​GroupKeyD_> groupKeyDMapping)` |
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​ResultD_>` | BavetAbstractUniConstraintStream.`groupBy​(Function<A,​GroupKeyA_> groupKeyAMapping, Function<A,​GroupKeyB_> groupKeyBMapping, Function<A,​GroupKeyC_> groupKeyCMapping, UniConstraintCollector<A,​ResultContainerD_,​ResultD_> collectorD)` |
    `<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)` |
    `<ResultContainerA_,​ResultA_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<ResultA_,​ResultB_,​ResultC_,​ResultD_>` | BavetAbstractUniConstraintStream.`groupBy​(UniConstraintCollector<A,​ResultContainerA_,​ResultA_> collectorA, UniConstraintCollector<A,​ResultContainerB_,​ResultB_> collectorB, 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
    --- | --- | ---
    `<GroupKey_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKey_,​ResultB_,​ResultC_,​ResultD_>` | DroolsAbstractBiConstraintStream.`groupBy​(BiFunction<A,​B,​GroupKey_> groupKeyMapping, BiConstraintCollector<A,​B,​ResultContainerB_,​ResultB_> collectorB, BiConstraintCollector<A,​B,​ResultContainerC_,​ResultC_> collectorC, BiConstraintCollector<A,​B,​ResultContainerD_,​ResultD_> collectorD)` |
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​GroupKeyD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​GroupKeyD_>` | DroolsAbstractBiConstraintStream.`groupBy​(BiFunction<A,​B,​GroupKeyA_> groupKeyAMapping, BiFunction<A,​B,​GroupKeyB_> groupKeyBMapping, BiFunction<A,​B,​GroupKeyC_> groupKeyCMapping, BiFunction<A,​B,​GroupKeyD_> groupKeyDMapping)` |
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​ResultD_>` | DroolsAbstractBiConstraintStream.`groupBy​(BiFunction<A,​B,​GroupKeyA_> groupKeyAMapping, BiFunction<A,​B,​GroupKeyB_> groupKeyBMapping, BiFunction<A,​B,​GroupKeyC_> groupKeyCMapping, BiConstraintCollector<A,​B,​ResultContainerD_,​ResultD_> collectorD)` |
    `<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)` |
    `<ResultContainerA_,​ResultA_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<ResultA_,​ResultB_,​ResultC_,​ResultD_>` | DroolsAbstractBiConstraintStream.`groupBy​(BiConstraintCollector<A,​B,​ResultContainerA_,​ResultA_> collectorA, BiConstraintCollector<A,​B,​ResultContainerB_,​ResultB_> collectorB, 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>` |

    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)` |
    `<GroupKey_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKey_,​ResultB_,​ResultC_,​ResultD_>` | 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, QuadConstraintCollector<A,​B,​C,​D,​ResultContainerD_,​ResultD_> collectorD)` |
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​GroupKeyD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​GroupKeyD_>` | DroolsAbstractQuadConstraintStream.`groupBy​(QuadFunction<A,​B,​C,​D,​GroupKeyA_> groupKeyAMapping, QuadFunction<A,​B,​C,​D,​GroupKeyB_> groupKeyBMapping, QuadFunction<A,​B,​C,​D,​GroupKeyC_> groupKeyCMapping, QuadFunction<A,​B,​C,​D,​GroupKeyD_> groupKeyDMapping)` |
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​ResultD_>` | DroolsAbstractQuadConstraintStream.`groupBy​(QuadFunction<A,​B,​C,​D,​GroupKeyA_> groupKeyAMapping, QuadFunction<A,​B,​C,​D,​GroupKeyB_> groupKeyBMapping, QuadFunction<A,​B,​C,​D,​GroupKeyC_> groupKeyCMapping, QuadConstraintCollector<A,​B,​C,​D,​ResultContainerD_,​ResultD_> collectorD)` |
    `<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)` |
    `<ResultContainerA_,​ResultA_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<ResultA_,​ResultB_,​ResultC_,​ResultD_>` | 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, 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
    --- | --- | ---
    `<GroupKey_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKey_,​ResultB_,​ResultC_,​ResultD_>` | DroolsAbstractTriConstraintStream.`groupBy​(TriFunction<A,​B,​C,​GroupKey_> groupKeyMapping, TriConstraintCollector<A,​B,​C,​ResultContainerB_,​ResultB_> collectorB, TriConstraintCollector<A,​B,​C,​ResultContainerC_,​ResultC_> collectorC, TriConstraintCollector<A,​B,​C,​ResultContainerD_,​ResultD_> collectorD)` |
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​GroupKeyD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​GroupKeyD_>` | DroolsAbstractTriConstraintStream.`groupBy​(TriFunction<A,​B,​C,​GroupKeyA_> groupKeyAMapping, TriFunction<A,​B,​C,​GroupKeyB_> groupKeyBMapping, TriFunction<A,​B,​C,​GroupKeyC_> groupKeyCMapping, TriFunction<A,​B,​C,​GroupKeyD_> groupKeyDMapping)` |
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​ResultD_>` | DroolsAbstractTriConstraintStream.`groupBy​(TriFunction<A,​B,​C,​GroupKeyA_> groupKeyAMapping, TriFunction<A,​B,​C,​GroupKeyB_> groupKeyBMapping, TriFunction<A,​B,​C,​GroupKeyC_> groupKeyCMapping, TriConstraintCollector<A,​B,​C,​ResultContainerD_,​ResultD_> collectorD)` |
    `<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)` |
    `<ResultContainerA_,​ResultA_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<ResultA_,​ResultB_,​ResultC_,​ResultD_>` | DroolsAbstractTriConstraintStream.`groupBy​(TriConstraintCollector<A,​B,​C,​ResultContainerA_,​ResultA_> collectorA, TriConstraintCollector<A,​B,​C,​ResultContainerB_,​ResultB_> collectorB, 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
    --- | --- | ---
    `<GroupKey_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKey_,​ResultB_,​ResultC_,​ResultD_>` | DroolsAbstractUniConstraintStream.`groupBy​(Function<A,​GroupKey_> groupKeyMapping, UniConstraintCollector<A,​ResultContainerB_,​ResultB_> collectorB, UniConstraintCollector<A,​ResultContainerC_,​ResultC_> collectorC, UniConstraintCollector<A,​ResultContainerD_,​ResultD_> collectorD)` |
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​GroupKeyD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​GroupKeyD_>` | DroolsAbstractUniConstraintStream.`groupBy​(Function<A,​GroupKeyA_> groupKeyAMapping, Function<A,​GroupKeyB_> groupKeyBMapping, Function<A,​GroupKeyC_> groupKeyCMapping, Function<A,​GroupKeyD_> groupKeyDMapping)` |
    `<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<GroupKeyA_,​GroupKeyB_,​GroupKeyC_,​ResultD_>` | DroolsAbstractUniConstraintStream.`groupBy​(Function<A,​GroupKeyA_> groupKeyAMapping, Function<A,​GroupKeyB_> groupKeyBMapping, Function<A,​GroupKeyC_> groupKeyCMapping, UniConstraintCollector<A,​ResultContainerD_,​ResultD_> collectorD)` |
    `<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)` |
    `<ResultContainerA_,​ResultA_,​ResultContainerB_,​ResultB_,​ResultContainerC_,​ResultC_,​ResultContainerD_,​ResultD_> QuadConstraintStream<ResultA_,​ResultB_,​ResultC_,​ResultD_>` | DroolsAbstractUniConstraintStream.`groupBy​(UniConstraintCollector<A,​ResultContainerA_,​ResultA_> collectorA, UniConstraintCollector<A,​ResultContainerB_,​ResultB_> collectorB, 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>` |

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

  - ### 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​(UniConstraintStream<D> otherStream)` |
    `protected QuadConstraintStream<A,​B,​C,​D>` | TriConstraintStreamHelper.`doJoin​(UniConstraintStream<D> otherStream, QuadJoiner<A,​B,​C,​D> joiner)` |
    `protected QuadConstraintStream<A,​B,​C,​D>` | TriConstraintStreamHelper.`doJoin​(UniConstraintStream<D> otherStream, 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)` |