## Uses of Interface
org.optaplanner.core.api.score.stream.bi.BiConstraintStream

- Packages that use BiConstraintStream
  Package | Description
  --- | ---
  org.optaplanner.core.api.score.stream |
  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 |
  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.uni |

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

    Methods in org.optaplanner.core.api.score.stream that return BiConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `default <A> BiConstraintStream<A,​A>` | ConstraintFactory.`fromUniquePair​(Class<A> fromClass)` | Create a new `BiConstraintStream` for every unique combination of A and another A with a higher `PlanningId`.
    `<A> BiConstraintStream<A,​A>` | ConstraintFactory.`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).
    `default <A> BiConstraintStream<A,​A>` | ConstraintFactory.`fromUniquePair​(Class<A> fromClass, BiJoiner<A,​A>... joiners)` | As defined by `ConstraintFactory.fromUniquePair(Class, BiJoiner)`.
    `default <A> BiConstraintStream<A,​A>` | ConstraintFactory.`fromUniquePair​(Class<A> fromClass, BiJoiner<A,​A> joiner1, BiJoiner<A,​A> joiner2)` | As defined by `ConstraintFactory.fromUniquePair(Class, BiJoiner)`.
    `default <A> BiConstraintStream<A,​A>` | ConstraintFactory.`fromUniquePair​(Class<A> fromClass, BiJoiner<A,​A> joiner1, BiJoiner<A,​A> joiner2, BiJoiner<A,​A> joiner3)` | As defined by `ConstraintFactory.fromUniquePair(Class, BiJoiner)`.
    `default <A> BiConstraintStream<A,​A>` | ConstraintFactory.`fromUniquePair​(Class<A> fromClass, BiJoiner<A,​A> joiner1, BiJoiner<A,​A> joiner2, BiJoiner<A,​A> joiner3, BiJoiner<A,​A> joiner4)` | As defined by `ConstraintFactory.fromUniquePair(Class, BiJoiner)`.

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

    Methods in org.optaplanner.core.api.score.stream.bi that return BiConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `BiConstraintStream<A,​B>` | BiConstraintStream.`distinct()` | Transforms the stream in such a way that all the tuples going through it are distinct.
    `BiConstraintStream<A,​B>` | BiConstraintStream.`filter​(BiPredicate<A,​B> predicate)` | Exhaustively test each tuple of facts against the `BiPredicate` and match if `BiPredicate.test(Object, Object)` returns true.
    `<GroupKey_,​ResultContainer_,​Result_> BiConstraintStream<GroupKey_,​Result_>` | BiConstraintStream.`groupBy​(BiFunction<A,​B,​GroupKey_> groupKeyMapping, BiConstraintCollector<A,​B,​ResultContainer_,​Result_> collector)` | Convert the `BiConstraintStream` to a different `BiConstraintStream`, consisting of unique tuples.
    `<GroupKeyA_,​GroupKeyB_> BiConstraintStream<GroupKeyA_,​GroupKeyB_>` | BiConstraintStream.`groupBy​(BiFunction<A,​B,​GroupKeyA_> groupKeyAMapping, BiFunction<A,​B,​GroupKeyB_> groupKeyBMapping)` | Convert the `BiConstraintStream` to a different `BiConstraintStream`, consisting of unique tuples.
    `<ResultContainerA_,​ResultA_,​ResultContainerB_,​ResultB_> BiConstraintStream<ResultA_,​ResultB_>` | BiConstraintStream.`groupBy​(BiConstraintCollector<A,​B,​ResultContainerA_,​ResultA_> collectorA, BiConstraintCollector<A,​B,​ResultContainerB_,​ResultB_> collectorB)` | Convert the `BiConstraintStream` to a `BiConstraintStream`, containing only a single tuple, the result of applying two `BiConstraintCollector`s.
    `default <C> BiConstraintStream<A,​B>` | BiConstraintStream.`ifExists​(Class<C> otherClass, TriJoiner<A,​B,​C> joiner)` | Create a new `BiConstraintStream` for every pair of A and B where C exists for which the `TriJoiner` is true (for the properties it extracts from the facts).
    `<C> BiConstraintStream<A,​B>` | BiConstraintStream.`ifExists​(Class<C> otherClass, TriJoiner<A,​B,​C>... joiners)` | As defined by `ifExists(Class, TriJoiner)`.
    `default <C> BiConstraintStream<A,​B>` | BiConstraintStream.`ifExists​(Class<C> otherClass, TriJoiner<A,​B,​C> joiner1, TriJoiner<A,​B,​C> joiner2)` | As defined by `ifExists(Class, TriJoiner)`.
    `default <C> BiConstraintStream<A,​B>` | BiConstraintStream.`ifExists​(Class<C> otherClass, TriJoiner<A,​B,​C> joiner1, TriJoiner<A,​B,​C> joiner2, TriJoiner<A,​B,​C> joiner3)` | As defined by `ifExists(Class, TriJoiner)`.
    `default <C> BiConstraintStream<A,​B>` | BiConstraintStream.`ifExists​(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 `ifExists(Class, TriJoiner)`.
    `default <C> BiConstraintStream<A,​B>` | BiConstraintStream.`ifNotExists​(Class<C> otherClass, TriJoiner<A,​B,​C> joiner)` | Create a new `BiConstraintStream` for every pair of A and B where C does not exist for which the `TriJoiner` is true (for the properties it extracts from the facts).
    `<C> BiConstraintStream<A,​B>` | BiConstraintStream.`ifNotExists​(Class<C> otherClass, TriJoiner<A,​B,​C>... joiners)` | As defined by `ifNotExists(Class, TriJoiner)`.
    `default <C> BiConstraintStream<A,​B>` | BiConstraintStream.`ifNotExists​(Class<C> otherClass, TriJoiner<A,​B,​C> joiner1, TriJoiner<A,​B,​C> joiner2)` | As defined by `ifNotExists(Class, TriJoiner)`.
    `default <C> BiConstraintStream<A,​B>` | BiConstraintStream.`ifNotExists​(Class<C> otherClass, TriJoiner<A,​B,​C> joiner1, TriJoiner<A,​B,​C> joiner2, TriJoiner<A,​B,​C> joiner3)` | As defined by `ifNotExists(Class, TriJoiner)`.
    `default <C> BiConstraintStream<A,​B>` | BiConstraintStream.`ifNotExists​(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 `ifNotExists(Class, TriJoiner)`.

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

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

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

    Methods in org.optaplanner.core.api.score.stream.tri that return BiConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `<GroupKey_,​ResultContainer_,​Result_> BiConstraintStream<GroupKey_,​Result_>` | TriConstraintStream.`groupBy​(TriFunction<A,​B,​C,​GroupKey_> groupKeyMapping, TriConstraintCollector<A,​B,​C,​ResultContainer_,​Result_> collector)` | Convert the `TriConstraintStream` to a `BiConstraintStream`, consisting of unique tuples.
    `<GroupKeyA_,​GroupKeyB_> BiConstraintStream<GroupKeyA_,​GroupKeyB_>` | TriConstraintStream.`groupBy​(TriFunction<A,​B,​C,​GroupKeyA_> groupKeyAMapping, TriFunction<A,​B,​C,​GroupKeyB_> groupKeyBMapping)` | Convert the `TriConstraintStream` to a `BiConstraintStream`, consisting of unique tuples.
    `<ResultContainerA_,​ResultA_,​ResultContainerB_,​ResultB_> BiConstraintStream<ResultA_,​ResultB_>` | TriConstraintStream.`groupBy​(TriConstraintCollector<A,​B,​C,​ResultContainerA_,​ResultA_> collectorA, TriConstraintCollector<A,​B,​C,​ResultContainerB_,​ResultB_> collectorB)` | Convert the `TriConstraintStream` to a `BiConstraintStream`, containing only a single tuple, the result of applying two `TriConstraintCollector`s.

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

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

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

    Methods in org.optaplanner.core.impl.score.stream that return BiConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `<A> BiConstraintStream<A,​A>` | InnerConstraintFactory.`fromUniquePair​(Class<A> fromClass, BiJoiner<A,​A> joiner)` |

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

    Classes in org.optaplanner.core.impl.score.stream.bavet.bi that implement BiConstraintStream
    Modifier and Type | Class | Description
    --- | --- | ---
    `class` | `BavetAbstractBiConstraintStream<Solution_,​A,​B>` |
    `class` | `BavetFilterBiConstraintStream<Solution_,​A,​B>` |
    `class` | `BavetGroupBiConstraintStream<Solution_,​GroupKey_,​ResultContainer_,​Result_>` |
    `class` | `BavetGroupBridgeBiConstraintStream<Solution_,​A,​B,​NewA,​ResultContainer_,​NewB>` |
    `class` | `BavetJoinBiConstraintStream<Solution_,​A,​B>` |
    `class` | `BavetJoinBridgeBiConstraintStream<Solution_,​A,​B>` |
    `class` | `BavetScoringBiConstraintStream<Solution_,​A,​B>` |

    Methods in org.optaplanner.core.impl.score.stream.bavet.bi that return BiConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `<GroupKey_,​ResultContainer_,​Result_> BiConstraintStream<GroupKey_,​Result_>` | BavetAbstractBiConstraintStream.`groupBy​(BiFunction<A,​B,​GroupKey_> groupKeyMapping, BiConstraintCollector<A,​B,​ResultContainer_,​Result_> collector)` |
    `<GroupKeyA_,​GroupKeyB_> BiConstraintStream<GroupKeyA_,​GroupKeyB_>` | BavetAbstractBiConstraintStream.`groupBy​(BiFunction<A,​B,​GroupKeyA_> groupKeyAMapping, BiFunction<A,​B,​GroupKeyB_> groupKeyBMapping)` |
    `<ResultContainerA_,​ResultA_,​ResultContainerB_,​ResultB_> BiConstraintStream<ResultA_,​ResultB_>` | BavetAbstractBiConstraintStream.`groupBy​(BiConstraintCollector<A,​B,​ResultContainerA_,​ResultA_> collectorA, BiConstraintCollector<A,​B,​ResultContainerB_,​ResultB_> collectorB)` |
    `<C> BiConstraintStream<A,​B>` | BavetAbstractBiConstraintStream.`ifExists​(Class<C> otherClass, TriJoiner<A,​B,​C>... joiners)` |
    `<C> BiConstraintStream<A,​B>` | BavetAbstractBiConstraintStream.`ifNotExists​(Class<C> otherClass, TriJoiner<A,​B,​C>... joiners)` |

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

    Methods in org.optaplanner.core.impl.score.stream.bavet.tri that return BiConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `<GroupKey_,​ResultContainer_,​Result_> BiConstraintStream<GroupKey_,​Result_>` | BavetAbstractTriConstraintStream.`groupBy​(TriFunction<A,​B,​C,​GroupKey_> groupKeyMapping, TriConstraintCollector<A,​B,​C,​ResultContainer_,​Result_> collector)` |
    `<GroupKeyA_,​GroupKeyB_> BiConstraintStream<GroupKeyA_,​GroupKeyB_>` | BavetAbstractTriConstraintStream.`groupBy​(TriFunction<A,​B,​C,​GroupKeyA_> groupKeyAMapping, TriFunction<A,​B,​C,​GroupKeyB_> groupKeyBMapping)` |
    `<ResultContainerA_,​ResultA_,​ResultContainerB_,​ResultB_> BiConstraintStream<ResultA_,​ResultB_>` | BavetAbstractTriConstraintStream.`groupBy​(TriConstraintCollector<A,​B,​C,​ResultContainerA_,​ResultA_> collectorA, TriConstraintCollector<A,​B,​C,​ResultContainerB_,​ResultB_> collectorB)` |

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

    Methods in org.optaplanner.core.impl.score.stream.bavet.uni that return BiConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `<GroupKey_,​ResultContainer_,​Result_> BiConstraintStream<GroupKey_,​Result_>` | BavetAbstractUniConstraintStream.`groupBy​(Function<A,​GroupKey_> groupKeyMapping, UniConstraintCollector<A,​ResultContainer_,​Result_> collector)` |
    `<GroupKeyA_,​GroupKeyB_> BiConstraintStream<GroupKeyA_,​GroupKeyB_>` | BavetAbstractUniConstraintStream.`groupBy​(Function<A,​GroupKeyA_> groupKeyAMapping, Function<A,​GroupKeyB_> groupKeyBMapping)` |
    `<ResultContainerA_,​ResultA_,​ResultContainerB_,​ResultB_> BiConstraintStream<ResultA_,​ResultB_>` | BavetAbstractUniConstraintStream.`groupBy​(UniConstraintCollector<A,​ResultContainerA_,​ResultA_> collectorA, UniConstraintCollector<A,​ResultContainerB_,​ResultB_> collectorB)` |
    `<B> BiConstraintStream<A,​B>` | BavetAbstractUniConstraintStream.`join​(UniConstraintStream<B> otherStream, BiJoiner<A,​B> joiner)` |

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

    Subinterfaces of BiConstraintStream in org.optaplanner.core.impl.score.stream.bi
    Modifier and Type | Interface | Description
    --- | --- | ---
    `interface` | `InnerBiConstraintStream<A,​B>` |

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

    Constructors in org.optaplanner.core.impl.score.stream.bi with parameters of type BiConstraintStream
    Constructor | Description
    --- | ---
    `BiConstraintStreamHelper​(BiConstraintStream<A,​B> stream)` |

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

    Classes in org.optaplanner.core.impl.score.stream.drools.bi that implement BiConstraintStream
    Modifier and Type | Class | Description
    --- | --- | ---
    `class` | `DroolsAbstractBiConstraintStream<Solution_,​A,​B>` |
    `class` | `DroolsExistsBiConstraintStream<Solution_,​A,​B>` |
    `class` | `DroolsFilterBiConstraintStream<Solution_,​A,​B>` |
    `class` | `DroolsGroupingBiConstraintStream<Solution_,​NewA,​NewB>` |
    `class` | `DroolsJoinBiConstraintStream<Solution_,​A,​B>` |

    Methods in org.optaplanner.core.impl.score.stream.drools.bi that return BiConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `BiConstraintStream<A,​B>` | DroolsAbstractBiConstraintStream.`filter​(BiPredicate<A,​B> predicate)` |
    `<GroupKey_,​__,​Result_> BiConstraintStream<GroupKey_,​Result_>` | DroolsAbstractBiConstraintStream.`groupBy​(BiFunction<A,​B,​GroupKey_> groupKeyMapping, BiConstraintCollector<A,​B,​__,​Result_> collector)` |
    `<GroupKeyA_,​GroupKeyB_> BiConstraintStream<GroupKeyA_,​GroupKeyB_>` | DroolsAbstractBiConstraintStream.`groupBy​(BiFunction<A,​B,​GroupKeyA_> groupKeyAMapping, BiFunction<A,​B,​GroupKeyB_> groupKeyBMapping)` |
    `<ResultContainerA_,​ResultA_,​ResultContainerB_,​ResultB_> BiConstraintStream<ResultA_,​ResultB_>` | DroolsAbstractBiConstraintStream.`groupBy​(BiConstraintCollector<A,​B,​ResultContainerA_,​ResultA_> collectorA, BiConstraintCollector<A,​B,​ResultContainerB_,​ResultB_> collectorB)` |
    `<C> BiConstraintStream<A,​B>` | DroolsAbstractBiConstraintStream.`ifExists​(Class<C> otherClass, TriJoiner<A,​B,​C>... joiners)` |
    `<C> BiConstraintStream<A,​B>` | DroolsAbstractBiConstraintStream.`ifNotExists​(Class<C> otherClass, TriJoiner<A,​B,​C>... joiners)` |

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

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

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

    Methods in org.optaplanner.core.impl.score.stream.drools.tri that return BiConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `<GroupKey_,​ResultContainer_,​Result_> BiConstraintStream<GroupKey_,​Result_>` | DroolsAbstractTriConstraintStream.`groupBy​(TriFunction<A,​B,​C,​GroupKey_> groupKeyMapping, TriConstraintCollector<A,​B,​C,​ResultContainer_,​Result_> collector)` |
    `<GroupKeyA_,​GroupKeyB_> BiConstraintStream<GroupKeyA_,​GroupKeyB_>` | DroolsAbstractTriConstraintStream.`groupBy​(TriFunction<A,​B,​C,​GroupKeyA_> groupKeyAMapping, TriFunction<A,​B,​C,​GroupKeyB_> groupKeyBMapping)` |
    `<ResultContainerA_,​ResultA_,​ResultContainerB_,​ResultB_> BiConstraintStream<ResultA_,​ResultB_>` | DroolsAbstractTriConstraintStream.`groupBy​(TriConstraintCollector<A,​B,​C,​ResultContainerA_,​ResultA_> collectorA, TriConstraintCollector<A,​B,​C,​ResultContainerB_,​ResultB_> collectorB)` |

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

    Methods in org.optaplanner.core.impl.score.stream.drools.uni that return BiConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `<GroupKey_,​ResultContainer_,​Result_> BiConstraintStream<GroupKey_,​Result_>` | DroolsAbstractUniConstraintStream.`groupBy​(Function<A,​GroupKey_> groupKeyMapping, UniConstraintCollector<A,​ResultContainer_,​Result_> collector)` |
    `<GroupKeyA_,​GroupKeyB_> BiConstraintStream<GroupKeyA_,​GroupKeyB_>` | DroolsAbstractUniConstraintStream.`groupBy​(Function<A,​GroupKeyA_> groupKeyAMapping, Function<A,​GroupKeyB_> groupKeyBMapping)` |
    `<ResultContainerA_,​ResultA_,​ResultContainerB_,​ResultB_> BiConstraintStream<ResultA_,​ResultB_>` | DroolsAbstractUniConstraintStream.`groupBy​(UniConstraintCollector<A,​ResultContainerA_,​ResultA_> collectorA, UniConstraintCollector<A,​ResultContainerB_,​ResultB_> collectorB)` |
    `<B> BiConstraintStream<A,​B>` | DroolsAbstractUniConstraintStream.`join​(UniConstraintStream<B> otherStream, BiJoiner<A,​B> joiner)` |

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

    Methods in org.optaplanner.core.impl.score.stream.uni that return BiConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `protected BiConstraintStream<A,​B>` | UniConstraintStreamHelper.`doJoin​(UniConstraintStream<B> otherStream)` |
    `protected BiConstraintStream<A,​B>` | UniConstraintStreamHelper.`doJoin​(UniConstraintStream<B> otherStream, BiJoiner<A,​B> joiner)` |
    `protected BiConstraintStream<A,​B>` | UniConstraintStreamHelper.`doJoin​(UniConstraintStream<B> otherStream, BiJoiner<A,​B>... joiners)` |
    `protected BiConstraintStream<A,​B>` | UniConstraintStreamHelper.`filter​(BiConstraintStream<A,​B> stream, BiPredicate<A,​B> predicate)` |

    Methods in org.optaplanner.core.impl.score.stream.uni with parameters of type BiConstraintStream
    Modifier and Type | Method | Description
    --- | --- | ---
    `protected BiConstraintStream<A,​B>` | UniConstraintStreamHelper.`filter​(BiConstraintStream<A,​B> stream, BiPredicate<A,​B> predicate)` |