Package org.optaplanner.core.api.score.stream.quad

## Interface QuadConstraintCollector<A,​B,​C,​D,​ResultContainer_,​Result_>

- Type Parameters:
    `A` - the type of the first fact of the tuple in the source `QuadConstraintStream`
    `B` - the type of the second fact of the tuple in the source `QuadConstraintStream`
    `C` - the type of the third fact of the tuple in the source `QuadConstraintStream`
    `D` - the type of the fourth fact of the tuple in the source `QuadConstraintStream`
    `ResultContainer_` - the mutable accumulation type (often hidden as an implementation detail)
    `Result_` - the type of the fact of the tuple in the destination `ConstraintStream`
  All Known Implementing Classes:
    `DefaultQuadConstraintCollector`

      public interface QuadConstraintCollector<A,​B,​C,​D,​ResultContainer_,​Result_>

  Usually created with `ConstraintCollectors`. Used by `QuadConstraintStream.groupBy(QuadFunction, QuadConstraintCollector)`, ...

  Loosely based on JDK's `Collector`, but it returns an undo operation for each accumulation to enable incremental score calculation in `constraint streams`.

  See Also:
    `ConstraintCollectors`

- - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `PentaFunction<ResultContainer_,​A,​B,​C,​D,​Runnable>` | `accumulator()` | A lambda that extracts data from the matched facts, accumulates it in the result container and returns an undo operation for that accumulation.
    `Function<ResultContainer_,​Result_>` | `finisher()` | A lambda that converts the result container into the result.
    `Supplier<ResultContainer_>` | `supplier()` | A lambda that creates the result container, one for each group key combination.

- - ### Method Detail

    - #### supplier

          Supplier<ResultContainer_> supplier()

      A lambda that creates the result container, one for each group key combination.
      Returns:
        never null

    - #### accumulator

          PentaFunction<ResultContainer_,​A,​B,​C,​D,​Runnable> accumulator()

      A lambda that extracts data from the matched facts, accumulates it in the result container and returns an undo operation for that accumulation.
      Returns:
        never null, the undo operation. This lambda is called when the facts no longer matches.

    - #### finisher

          Function<ResultContainer_,​Result_> finisher()

      A lambda that converts the result container into the result.
      Returns:
        never null