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

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

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

    Methods in org.optaplanner.core.api.score.stream that return BiConstraintCollector
    Modifier and Type | Method | Description
    --- | --- | ---
    `static <A,​B> BiConstraintCollector<A,​B,​?,​Integer>` | ConstraintCollectors.`countBi()` | As defined by `ConstraintCollectors.count()`.
    `static <A,​B> BiConstraintCollector<A,​B,​?,​Integer>` | ConstraintCollectors.`countDistinct​(BiFunction<A,​B,​?> groupValueMapping)` | As defined by `ConstraintCollectors.countDistinct(Function)`.
    `static <A,​B> BiConstraintCollector<A,​B,​?,​Long>` | ConstraintCollectors.`countDistinctLong​(BiFunction<A,​B,​?> groupValueMapping)` | As defined by `ConstraintCollectors.countDistinct(Function)`.
    `static <A,​B> BiConstraintCollector<A,​B,​?,​Long>` | ConstraintCollectors.`countLongBi()` | As defined by `ConstraintCollectors.count()`.
    `static <A,​B,​Mapped extends Comparable<Mapped>> BiConstraintCollector<A,​B,​?,​Mapped>` | ConstraintCollectors.`max​(BiFunction<A,​B,​Mapped> groupValueMapping)` | As defined by `ConstraintCollectors.max(Function)`.
    `static <A,​B,​Mapped> BiConstraintCollector<A,​B,​?,​Mapped>` | ConstraintCollectors.`max​(BiFunction<A,​B,​Mapped> groupValueMapping, Comparator<Mapped> comparator)` | As defined by `ConstraintCollectors.max(Function)`, only with a custom `Comparator`.
    `static <A,​B,​Mapped extends Comparable<Mapped>> BiConstraintCollector<A,​B,​?,​Mapped>` | ConstraintCollectors.`min​(BiFunction<A,​B,​Mapped> groupValueMapping)` | As defined by `ConstraintCollectors.min(Function)`.
    `static <A,​B,​Mapped> BiConstraintCollector<A,​B,​?,​Mapped>` | ConstraintCollectors.`min​(BiFunction<A,​B,​Mapped> groupValueMapping, Comparator<Mapped> comparator)` | As defined by `ConstraintCollectors.min(Function)`, only with a custom `Comparator`.
    `static <A,​B,​Result> BiConstraintCollector<A,​B,​?,​Result>` | ConstraintCollectors.`sum​(BiFunction<? super A,​? super B,​Result> groupValueMapping, Result zero, BinaryOperator<Result> adder, BinaryOperator<Result> subtractor)` | As defined by `ConstraintCollectors.sum(ToIntFunction)`.
    `static <A,​B> BiConstraintCollector<A,​B,​?,​Integer>` | ConstraintCollectors.`sum​(ToIntBiFunction<? super A,​? super B> groupValueMapping)` | As defined by `ConstraintCollectors.sum(ToIntFunction)`.
    `static <A,​B> BiConstraintCollector<A,​B,​?,​BigDecimal>` | ConstraintCollectors.`sumBigDecimal​(BiFunction<? super A,​? super B,​BigDecimal> groupValueMapping)` | As defined by `ConstraintCollectors.sum(ToIntFunction)`.
    `static <A,​B> BiConstraintCollector<A,​B,​?,​BigInteger>` | ConstraintCollectors.`sumBigInteger​(BiFunction<? super A,​? super B,​BigInteger> groupValueMapping)` | As defined by `ConstraintCollectors.sum(ToIntFunction)`.
    `static <A,​B> BiConstraintCollector<A,​B,​?,​Duration>` | ConstraintCollectors.`sumDuration​(BiFunction<? super A,​? super B,​Duration> groupValueMapping)` | As defined by `ConstraintCollectors.sum(ToIntFunction)`.
    `static <A,​B> BiConstraintCollector<A,​B,​?,​Long>` | ConstraintCollectors.`sumLong​(ToLongBiFunction<? super A,​? super B> groupValueMapping)` | As defined by `ConstraintCollectors.sum(ToIntFunction)`.
    `static <A,​B> BiConstraintCollector<A,​B,​?,​Period>` | ConstraintCollectors.`sumPeriod​(BiFunction<? super A,​? super B,​Period> groupValueMapping)` | As defined by `ConstraintCollectors.sum(ToIntFunction)`.
    `static <A,​B,​Mapped,​Result extends Collection<Mapped>> BiConstraintCollector<A,​B,​?,​Result>` | ConstraintCollectors.`toCollection​(BiFunction<A,​B,​Mapped> groupValueMapping, IntFunction<Result> collectionFunction)` |
    `static <A,​B,​Mapped> BiConstraintCollector<A,​B,​?,​List<Mapped>>` | ConstraintCollectors.`toList​(BiFunction<A,​B,​Mapped> groupValueMapping)` | Creates constraint collector that returns `List` of the given element type.
    `static <A,​B,​Key,​Value> BiConstraintCollector<A,​B,​?,​Map<Key,​Set<Value>>>` | ConstraintCollectors.`toMap​(BiFunction<? super A,​? super B,​? extends Key> keyMapper, BiFunction<? super A,​? super B,​? extends Value> valueMapper)` | As defined by `ConstraintCollectors.toMap(Function, Function)`.
    `static <A,​B,​Key,​Value> BiConstraintCollector<A,​B,​?,​Map<Key,​Value>>` | ConstraintCollectors.`toMap​(BiFunction<? super A,​? super B,​? extends Key> keyMapper, BiFunction<? super A,​? super B,​? extends Value> valueMapper, BinaryOperator<Value> mergeFunction)` | As defined by `ConstraintCollectors.toMap(Function, Function, BinaryOperator)`.
    `static <A,​B,​Key,​Value,​ValueSet extends Set<Value>> BiConstraintCollector<A,​B,​?,​Map<Key,​ValueSet>>` | ConstraintCollectors.`toMap​(BiFunction<? super A,​? super B,​? extends Key> keyMapper, BiFunction<? super A,​? super B,​? extends Value> valueMapper, IntFunction<ValueSet> valueSetFunction)` | As defined by `ConstraintCollectors.toMap(Function, Function, IntFunction)`.
    `static <A,​B,​Mapped> BiConstraintCollector<A,​B,​?,​Set<Mapped>>` | ConstraintCollectors.`toSet​(BiFunction<A,​B,​Mapped> groupValueMapping)` | As defined by `ConstraintCollectors.toSet(Function)`.
    `static <A,​B,​Key extends Comparable<Key>,​Value> BiConstraintCollector<A,​B,​?,​SortedMap<Key,​Set<Value>>>` | ConstraintCollectors.`toSortedMap​(BiFunction<? super A,​? super B,​? extends Key> keyMapper, BiFunction<? super A,​? super B,​? extends Value> valueMapper)` | As defined by `ConstraintCollectors.toSortedMap(Function, Function)`.
    `static <A,​B,​Key extends Comparable<Key>,​Value> BiConstraintCollector<A,​B,​?,​SortedMap<Key,​Value>>` | ConstraintCollectors.`toSortedMap​(BiFunction<? super A,​? super B,​? extends Key> keyMapper, BiFunction<? super A,​? super B,​? extends Value> valueMapper, BinaryOperator<Value> mergeFunction)` | As defined by `ConstraintCollectors.toSortedMap(Function, Function, BinaryOperator)`.
    `static <A,​B,​Key extends Comparable<Key>,​Value,​ValueSet extends Set<Value>> BiConstraintCollector<A,​B,​?,​SortedMap<Key,​ValueSet>>` | ConstraintCollectors.`toSortedMap​(BiFunction<? super A,​? super B,​? extends Key> keyMapper, BiFunction<? super A,​? super B,​? extends Value> valueMapper, IntFunction<ValueSet> valueSetFunction)` | As defined by `ConstraintCollectors.toSortedMap(Function, Function, IntFunction)`.
    `static <A,​B,​Mapped extends Comparable<Mapped>> BiConstraintCollector<A,​B,​?,​SortedSet<Mapped>>` | ConstraintCollectors.`toSortedSet​(BiFunction<A,​B,​Mapped> groupValueMapping)` | As defined by `ConstraintCollectors.toSortedSet(Function)`.

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

    Methods in org.optaplanner.core.api.score.stream.bi with parameters of type BiConstraintCollector
    Modifier and Type | Method | Description
    --- | --- | ---
    `<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.
    `<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.
    `<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_,​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_,​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)`.
    `<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)`.
    `<ResultContainer_,​Result_> UniConstraintStream<Result_>` | BiConstraintStream.`groupBy​(BiConstraintCollector<A,​B,​ResultContainer_,​Result_> collector)` | Runs all tuples of the stream through a given @`BiConstraintCollector` and converts them into a new `UniConstraintStream` which only has a single tuple, the result of applying `BiConstraintCollector`.
    `<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.
    `<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.
    `<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 BiConstraintCollector in org.optaplanner.core.impl.score.stream.bavet.bi

    Methods in org.optaplanner.core.impl.score.stream.bavet.bi with parameters of type BiConstraintCollector
    Modifier and Type | Method | Description
    --- | --- | ---
    `<GroupKey_,​ResultContainer_,​Result_> BiConstraintStream<GroupKey_,​Result_>` | BavetAbstractBiConstraintStream.`groupBy​(BiFunction<A,​B,​GroupKey_> groupKeyMapping, BiConstraintCollector<A,​B,​ResultContainer_,​Result_> collector)` |
    `<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)` |
    `<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_,​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_,​ResultContainer_,​Result_> TriConstraintStream<GroupKeyA_,​GroupKeyB_,​Result_>` | BavetAbstractBiConstraintStream.`groupBy​(BiFunction<A,​B,​GroupKeyA_> groupKeyAMapping, BiFunction<A,​B,​GroupKeyB_> groupKeyBMapping, BiConstraintCollector<A,​B,​ResultContainer_,​Result_> collector)` |
    `<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)` |
    `<ResultContainer_,​Result_> UniConstraintStream<Result_>` | BavetAbstractBiConstraintStream.`groupBy​(BiConstraintCollector<A,​B,​ResultContainer_,​Result_> collector)` |
    `<ResultContainerA_,​ResultA_,​ResultContainerB_,​ResultB_> BiConstraintStream<ResultA_,​ResultB_>` | BavetAbstractBiConstraintStream.`groupBy​(BiConstraintCollector<A,​B,​ResultContainerA_,​ResultA_> collectorA, BiConstraintCollector<A,​B,​ResultContainerB_,​ResultB_> collectorB)` |
    `<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)` |
    `<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)` |

    Constructors in org.optaplanner.core.impl.score.stream.bavet.bi with parameters of type BiConstraintCollector
    Constructor | Description
    --- | ---
    `BavetGroupBridgeBiConstraintStream​(BavetConstraintFactory<Solution_> constraintFactory, BavetAbstractBiConstraintStream<Solution_,​A,​B> parent, BiFunction<A,​B,​NewA> groupKeyMapping, BiConstraintCollector<A,​B,​ResultContainer_,​NewB> collector)` |
    `BavetGroupBridgeBiNode​(BavetConstraintSession session, int nodeIndex, BavetAbstractBiNode<A,​B> parentNode, BiFunction<A,​B,​NewA> groupKeyMapping, BiConstraintCollector<A,​B,​ResultContainer_,​NewB> collector)` |

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

    Classes in org.optaplanner.core.impl.score.stream.bi that implement BiConstraintCollector
    Modifier and Type | Class | Description
    --- | --- | ---
    `class` | `DefaultBiConstraintCollector<A,​B,​ResultContainer_,​Result_>` |

    Methods in org.optaplanner.core.impl.score.stream.bi that return BiConstraintCollector
    Modifier and Type | Method | Description
    --- | --- | ---
    `static <A,​B,​Result_> BiConstraintCollector<A,​B,​?,​Result_>` | DefaultBiConstraintCollector.`noop()` |

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

    Methods in org.optaplanner.core.impl.score.stream.drools.bi with parameters of type BiConstraintCollector
    Modifier and Type | Method | Description
    --- | --- | ---
    `<GroupKey_,​__,​Result_> BiConstraintStream<GroupKey_,​Result_>` | DroolsAbstractBiConstraintStream.`groupBy​(BiFunction<A,​B,​GroupKey_> groupKeyMapping, BiConstraintCollector<A,​B,​__,​Result_> collector)` |
    `<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)` |
    `<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_,​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_,​ResultContainer_,​Result_> TriConstraintStream<GroupKeyA_,​GroupKeyB_,​Result_>` | DroolsAbstractBiConstraintStream.`groupBy​(BiFunction<A,​B,​GroupKeyA_> groupKeyAMapping, BiFunction<A,​B,​GroupKeyB_> groupKeyBMapping, BiConstraintCollector<A,​B,​ResultContainer_,​Result_> collector)` |
    `<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)` |
    `<ResultContainer_,​Result_> UniConstraintStream<Result_>` | DroolsAbstractBiConstraintStream.`groupBy​(BiConstraintCollector<A,​B,​ResultContainer_,​Result_> collector)` |
    `<ResultContainerA_,​ResultA_,​ResultContainerB_,​ResultB_> BiConstraintStream<ResultA_,​ResultB_>` | DroolsAbstractBiConstraintStream.`groupBy​(BiConstraintCollector<A,​B,​ResultContainerA_,​ResultA_> collectorA, BiConstraintCollector<A,​B,​ResultContainerB_,​ResultB_> collectorB)` |
    `<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)` |
    `<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)` |

    Constructors in org.optaplanner.core.impl.score.stream.drools.bi with parameters of type BiConstraintCollector
    Constructor | Description
    --- | ---
    `DroolsGroupingBiConstraintStream​(DroolsConstraintFactory<Solution_> constraintFactory, DroolsAbstractBiConstraintStream<Solution_,​A,​B> parent, BiFunction<A,​B,​NewA> groupKeyMapping, BiConstraintCollector<A,​B,​?,​NewB> collector)` |
    `DroolsGroupingBiConstraintStream​(DroolsConstraintFactory<Solution_> constraintFactory, DroolsAbstractBiConstraintStream<Solution_,​A,​B> parent, BiConstraintCollector<A,​B,​?,​NewA> collectorA, BiConstraintCollector<A,​B,​?,​NewB> collectorB)` |

  - ### Uses of BiConstraintCollector in org.optaplanner.core.impl.score.stream.drools.common

    Methods in org.optaplanner.core.impl.score.stream.drools.common with parameters of type BiConstraintCollector
    Modifier and Type | Method | Description
    --- | --- | ---
    `<NewA,​NewB,​NewC,​NewD> QuadLeftHandSide<NewA,​NewB,​NewC,​NewD>` | BiLeftHandSide.`andGroupBy​(BiFunction<A,​B,​NewA> keyMappingA, BiFunction<A,​B,​NewB> keyMappingB, BiFunction<A,​B,​NewC> keyMappingC, BiConstraintCollector<A,​B,​?,​NewD> collectorD)` |
    `<NewA,​NewB,​NewC> TriLeftHandSide<NewA,​NewB,​NewC>` | BiLeftHandSide.`andGroupBy​(BiFunction<A,​B,​NewA> keyMappingA, BiFunction<A,​B,​NewB> keyMappingB, BiConstraintCollector<A,​B,​?,​NewC> collectorC)` |
    `<NewA,​NewB,​NewC,​NewD> QuadLeftHandSide<NewA,​NewB,​NewC,​NewD>` | BiLeftHandSide.`andGroupBy​(BiFunction<A,​B,​NewA> keyMappingA, BiFunction<A,​B,​NewB> keyMappingB, BiConstraintCollector<A,​B,​?,​NewC> collectorC, BiConstraintCollector<A,​B,​?,​NewD> collectorD)` |
    `<NewA,​NewB> BiLeftHandSide<NewA,​NewB>` | BiLeftHandSide.`andGroupBy​(BiFunction<A,​B,​NewA> keyMappingA, BiConstraintCollector<A,​B,​?,​NewB> collectorB)` |
    `<NewA,​NewB,​NewC> TriLeftHandSide<NewA,​NewB,​NewC>` | BiLeftHandSide.`andGroupBy​(BiFunction<A,​B,​NewA> keyMappingA, BiConstraintCollector<A,​B,​?,​NewB> collectorB, BiConstraintCollector<A,​B,​?,​NewC> collectorC)` |
    `<NewA,​NewB,​NewC,​NewD> QuadLeftHandSide<NewA,​NewB,​NewC,​NewD>` | BiLeftHandSide.`andGroupBy​(BiFunction<A,​B,​NewA> keyMappingA, BiConstraintCollector<A,​B,​?,​NewB> collectorB, BiConstraintCollector<A,​B,​?,​NewC> collectorC, BiConstraintCollector<A,​B,​?,​NewD> collectorD)` |
    `<NewA> UniLeftHandSide<NewA>` | BiLeftHandSide.`andGroupBy​(BiConstraintCollector<A,​B,​?,​NewA> collector)` |
    `<NewA,​NewB> BiLeftHandSide<NewA,​NewB>` | BiLeftHandSide.`andGroupBy​(BiConstraintCollector<A,​B,​?,​NewA> collectorA, BiConstraintCollector<A,​B,​?,​NewB> collectorB)` |
    `<NewA,​NewB,​NewC> TriLeftHandSide<NewA,​NewB,​NewC>` | BiLeftHandSide.`andGroupBy​(BiConstraintCollector<A,​B,​?,​NewA> collectorA, BiConstraintCollector<A,​B,​?,​NewB> collectorB, BiConstraintCollector<A,​B,​?,​NewC> collectorC)` |
    `<NewA,​NewB,​NewC,​NewD> QuadLeftHandSide<NewA,​NewB,​NewC,​NewD>` | BiLeftHandSide.`andGroupBy​(BiConstraintCollector<A,​B,​?,​NewA> collectorA, BiConstraintCollector<A,​B,​?,​NewB> collectorB, BiConstraintCollector<A,​B,​?,​NewC> collectorC, BiConstraintCollector<A,​B,​?,​NewD> collectorD)` |

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

    Constructors in org.optaplanner.core.impl.score.stream.drools.quad with parameters of type BiConstraintCollector
    Constructor | Description
    --- | ---
    `DroolsGroupingQuadConstraintStream​(DroolsConstraintFactory<Solution_> constraintFactory, DroolsAbstractBiConstraintStream<Solution_,​A,​B> parent, BiFunction<A,​B,​NewA> groupKeyAMapping, BiFunction<A,​B,​NewB> groupKeyBMapping, BiFunction<A,​B,​NewC> groupKeyCMapping, BiConstraintCollector<A,​B,​?,​NewD> collectorD)` |
    `DroolsGroupingQuadConstraintStream​(DroolsConstraintFactory<Solution_> constraintFactory, DroolsAbstractBiConstraintStream<Solution_,​A,​B> parent, BiFunction<A,​B,​NewA> groupKeyAMapping, BiFunction<A,​B,​NewB> groupKeyBMapping, BiConstraintCollector<A,​B,​?,​NewC> collectorC, BiConstraintCollector<A,​B,​?,​NewD> collectorD)` |
    `DroolsGroupingQuadConstraintStream​(DroolsConstraintFactory<Solution_> constraintFactory, DroolsAbstractBiConstraintStream<Solution_,​A,​B> parent, BiFunction<A,​B,​NewA> groupKeyAMapping, BiConstraintCollector<A,​B,​?,​NewB> collectorB, BiConstraintCollector<A,​B,​?,​NewC> collectorC, BiConstraintCollector<A,​B,​?,​NewD> collectorD)` |
    `DroolsGroupingQuadConstraintStream​(DroolsConstraintFactory<Solution_> constraintFactory, DroolsAbstractBiConstraintStream<Solution_,​A,​B> parent, BiConstraintCollector<A,​B,​?,​NewA> collectorA, BiConstraintCollector<A,​B,​?,​NewB> collectorB, BiConstraintCollector<A,​B,​?,​NewC> collectorC, BiConstraintCollector<A,​B,​?,​NewD> collectorD)` |

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

    Constructors in org.optaplanner.core.impl.score.stream.drools.tri with parameters of type BiConstraintCollector
    Constructor | Description
    --- | ---
    `DroolsGroupingTriConstraintStream​(DroolsConstraintFactory<Solution_> constraintFactory, DroolsAbstractBiConstraintStream<Solution_,​A,​B> parent, BiFunction<A,​B,​NewA> groupKeyAMapping, BiFunction<A,​B,​NewB> groupKeyBMapping, BiConstraintCollector<A,​B,​?,​NewC> collector)` |
    `DroolsGroupingTriConstraintStream​(DroolsConstraintFactory<Solution_> constraintFactory, DroolsAbstractBiConstraintStream<Solution_,​A,​B> parent, BiFunction<A,​B,​NewA> groupKeyAMapping, BiConstraintCollector<A,​B,​?,​NewB> collectorB, BiConstraintCollector<A,​B,​?,​NewC> collectorC)` |
    `DroolsGroupingTriConstraintStream​(DroolsConstraintFactory<Solution_> constraintFactory, DroolsAbstractBiConstraintStream<Solution_,​A,​B> parent, BiConstraintCollector<A,​B,​?,​NewA> collectorA, BiConstraintCollector<A,​B,​?,​NewB> collectorB, BiConstraintCollector<A,​B,​?,​NewC> collectorC)` |

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

    Constructors in org.optaplanner.core.impl.score.stream.drools.uni with parameters of type BiConstraintCollector
    Constructor | Description
    --- | ---
    `DroolsGroupingUniConstraintStream​(DroolsConstraintFactory<Solution_> constraintFactory, DroolsAbstractBiConstraintStream<Solution_,​A,​B> parent, BiConstraintCollector<A,​B,​?,​NewA> collector)` |