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

- Packages that use QuadJoiner
  Package | Description
  --- | ---
  org.optaplanner.core.api.score.stream |
  org.optaplanner.core.api.score.stream.tri | The `ConstraintStream` API for tri-tuples.
  org.optaplanner.core.impl.score.stream.bavet.tri |
  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.quad |
  org.optaplanner.core.impl.score.stream.tri |

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

    Methods in org.optaplanner.core.api.score.stream that return QuadJoiner
    Modifier and Type | Method | Description
    --- | --- | ---
    `static <A,​B,​C,​D,​Property_> QuadJoiner<A,​B,​C,​D>` | Joiners.`equal​(TriFunction<A,​B,​C,​Property_> leftMapping, Function<D,​Property_> rightMapping)` | Joins every (A,B,C) and D that share a property.
    `static <A,​B,​C,​D> QuadJoiner<A,​B,​C,​D>` | Joiners.`filtering​(QuadPredicate<A,​B,​C,​D> filter)` | Applies a filter to the joined tuple (A,B,C,D), with the semantics of `QuadConstraintStream.filter(QuadPredicate)`.
    `static <A,​B,​C,​D,​Property_ extends Comparable<Property_>> QuadJoiner<A,​B,​C,​D>` | Joiners.`greaterThan​(TriFunction<A,​B,​C,​Property_> leftMapping, Function<D,​Property_> rightMapping)` | Joins every (A,B,C) and D where a value of property of (A,B,C) is greater than the value of a property of D.
    `static <A,​B,​C,​D,​Property_ extends Comparable<Property_>> QuadJoiner<A,​B,​C,​D>` | Joiners.`greaterThanOrEqual​(TriFunction<A,​B,​C,​Property_> leftMapping, Function<D,​Property_> rightMapping)` | Joins every (A,B,C) and D where a value of property of (A,B,C) is greater than or equal to the value of a property of D.
    `static <A,​B,​C,​D,​Property_ extends Comparable<Property_>> QuadJoiner<A,​B,​C,​D>` | Joiners.`lessThan​(TriFunction<A,​B,​C,​Property_> leftMapping, Function<D,​Property_> rightMapping)` | Joins every (A,B,C) and D where a value of property of (A,B,C) is less than the value of a property of D.
    `static <A,​B,​C,​D,​Property_ extends Comparable<Property_>> QuadJoiner<A,​B,​C,​D>` | Joiners.`lessThanOrEqual​(TriFunction<A,​B,​C,​Property_> leftMapping, Function<D,​Property_> rightMapping)` | Joins every (A,B,C) and D where a value of property of (A,B,C) is less than or equal to the value of a property of D.
    `static <A,​B,​C,​D,​Property_ extends Comparable<Property_>> QuadJoiner<A,​B,​C,​D>` | Joiners.`overlapping​(TriFunction<A,​B,​C,​Property_> leftStartMapping, TriFunction<A,​B,​C,​Property_> leftEndMapping, Function<D,​Property_> rightStartMapping, Function<D,​Property_> rightEndMapping)` | As defined by `Joiners.overlapping(Function, Function)`.

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

    Methods in org.optaplanner.core.api.score.stream.tri with parameters of type QuadJoiner
    Modifier and Type | Method | Description
    --- | --- | ---
    `default <D> TriConstraintStream<A,​B,​C>` | TriConstraintStream.`ifExists​(Class<D> otherClass, QuadJoiner<A,​B,​C,​D> joiner)` | Create a new `BiConstraintStream` for every tuple of A, B and C where D exists for which the `QuadJoiner` is true (for the properties it extracts from the facts).
    `<D> TriConstraintStream<A,​B,​C>` | TriConstraintStream.`ifExists​(Class<D> otherClass, QuadJoiner<A,​B,​C,​D>... joiners)` | As defined by `TriConstraintStream.ifExists(Class, QuadJoiner)`.
    `default <D> TriConstraintStream<A,​B,​C>` | TriConstraintStream.`ifExists​(Class<D> otherClass, QuadJoiner<A,​B,​C,​D> joiner1, QuadJoiner<A,​B,​C,​D> joiner2)` | As defined by `TriConstraintStream.ifExists(Class, QuadJoiner)`.
    `default <D> TriConstraintStream<A,​B,​C>` | TriConstraintStream.`ifExists​(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.ifExists(Class, QuadJoiner)`.
    `default <D> TriConstraintStream<A,​B,​C>` | TriConstraintStream.`ifExists​(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.ifExists(Class, QuadJoiner)`.
    `default <D> TriConstraintStream<A,​B,​C>` | TriConstraintStream.`ifNotExists​(Class<D> otherClass, QuadJoiner<A,​B,​C,​D> joiner)` | Create a new `BiConstraintStream` for every tuple of A, B and C where D does not exist for which the `QuadJoiner` is true (for the properties it extracts from the facts).
    `<D> TriConstraintStream<A,​B,​C>` | TriConstraintStream.`ifNotExists​(Class<D> otherClass, QuadJoiner<A,​B,​C,​D>... joiners)` | As defined by `TriConstraintStream.ifNotExists(Class, QuadJoiner)`.
    `default <D> TriConstraintStream<A,​B,​C>` | TriConstraintStream.`ifNotExists​(Class<D> otherClass, QuadJoiner<A,​B,​C,​D> joiner1, QuadJoiner<A,​B,​C,​D> joiner2)` | As defined by `TriConstraintStream.ifNotExists(Class, QuadJoiner)`.
    `default <D> TriConstraintStream<A,​B,​C>` | TriConstraintStream.`ifNotExists​(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.ifNotExists(Class, QuadJoiner)`.
    `default <D> TriConstraintStream<A,​B,​C>` | TriConstraintStream.`ifNotExists​(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.ifNotExists(Class, QuadJoiner)`.
    `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)`.
    `<D> QuadConstraintStream<A,​B,​C,​D>` | TriConstraintStream.`join​(UniConstraintStream<D> otherStream, QuadJoiner<A,​B,​C,​D> joiner)` | Create a new `QuadConstraintStream` for every combination of [A, B] and C for which the `QuadJoiner` is true (for the properties it extracts from all facts).

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

    Methods in org.optaplanner.core.impl.score.stream.bavet.tri with parameters of type QuadJoiner
    Modifier and Type | Method | Description
    --- | --- | ---
    `<D> TriConstraintStream<A,​B,​C>` | BavetAbstractTriConstraintStream.`ifExists​(Class<D> otherClass, QuadJoiner<A,​B,​C,​D>... joiners)` |
    `<D> TriConstraintStream<A,​B,​C>` | BavetAbstractTriConstraintStream.`ifNotExists​(Class<D> otherClass, QuadJoiner<A,​B,​C,​D>... joiners)` |
    `<D> QuadConstraintStream<A,​B,​C,​D>` | BavetAbstractTriConstraintStream.`join​(UniConstraintStream<D> otherStream, QuadJoiner<A,​B,​C,​D> joiner)` |

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

    Methods in org.optaplanner.core.impl.score.stream.drools.common with parameters of type QuadJoiner
    Modifier and Type | Method | Description
    --- | --- | ---
    `<D> TriLeftHandSide<A,​B,​C>` | TriLeftHandSide.`andExists​(Class<D> dClass, QuadJoiner<A,​B,​C,​D>[] joiners)` |
    `<D> QuadLeftHandSide<A,​B,​C,​D>` | TriLeftHandSide.`andJoin​(UniLeftHandSide<D> right, QuadJoiner<A,​B,​C,​D> joiner)` |
    `<D> TriLeftHandSide<A,​B,​C>` | TriLeftHandSide.`andNotExists​(Class<D> dClass, QuadJoiner<A,​B,​C,​D>[] joiners)` |

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

    Constructors in org.optaplanner.core.impl.score.stream.drools.quad with parameters of type QuadJoiner
    Constructor | Description
    --- | ---
    `DroolsJoinQuadConstraintStream​(DroolsConstraintFactory<Solution_> constraintFactory, DroolsAbstractTriConstraintStream<Solution_,​A,​B,​C> parent, DroolsAbstractUniConstraintStream<Solution_,​D> otherStream, QuadJoiner<A,​B,​C,​D> joiner)` |

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

    Methods in org.optaplanner.core.impl.score.stream.drools.tri with parameters of type QuadJoiner
    Modifier and Type | Method | Description
    --- | --- | ---
    `<D> TriConstraintStream<A,​B,​C>` | DroolsAbstractTriConstraintStream.`ifExists​(Class<D> otherClass, QuadJoiner<A,​B,​C,​D>... joiners)` |
    `<D> TriConstraintStream<A,​B,​C>` | DroolsAbstractTriConstraintStream.`ifNotExists​(Class<D> otherClass, QuadJoiner<A,​B,​C,​D>... joiners)` |
    `<D> QuadConstraintStream<A,​B,​C,​D>` | DroolsAbstractTriConstraintStream.`join​(UniConstraintStream<D> otherStream, QuadJoiner<A,​B,​C,​D> joiner)` |

    Constructors in org.optaplanner.core.impl.score.stream.drools.tri with parameters of type QuadJoiner
    Constructor | Description
    --- | ---
    `DroolsExistsTriConstraintStream​(DroolsConstraintFactory<Solution_> constraintFactory, DroolsAbstractTriConstraintStream<Solution_,​A,​B,​C> parent, boolean shouldExist, Class<D> otherClass, QuadJoiner<A,​B,​C,​D>... joiners)` |

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

    Classes in org.optaplanner.core.impl.score.stream.quad that implement QuadJoiner
    Modifier and Type | Class | Description
    --- | --- | ---
    `class` | `AbstractQuadJoiner<A,​B,​C,​D>` |
    `class` | `CompositeQuadJoiner<A,​B,​C,​D>` |
    `class` | `FilteringQuadJoiner<A,​B,​C,​D>` |
    `class` | `NoneQuadJoiner<A,​B,​C,​D>` |
    `class` | `SingleQuadJoiner<A,​B,​C,​D>` |

    Methods in org.optaplanner.core.impl.score.stream.quad with parameters of type QuadJoiner
    Modifier and Type | Method | Description
    --- | --- | ---
    `static <A,​B,​C,​D> AbstractQuadJoiner<A,​B,​C,​D>` | AbstractQuadJoiner.`merge​(QuadJoiner<A,​B,​C,​D>... joiners)` |

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

    Methods in org.optaplanner.core.impl.score.stream.tri that return QuadJoiner
    Modifier and Type | Method | Description
    --- | --- | ---
    `protected QuadJoiner<A,​B,​C,​D>` | TriConstraintStreamHelper.`mergeJoiners​(QuadJoiner<A,​B,​C,​D>... joiners)` |

    Methods in org.optaplanner.core.impl.score.stream.tri with parameters of type QuadJoiner
    Modifier and Type | Method | Description
    --- | --- | ---
    `protected QuadConstraintStream<A,​B,​C,​D>` | TriConstraintStreamHelper.`doJoin​(Class<D> otherClass, QuadJoiner<A,​B,​C,​D> joiner)` |
    `protected QuadConstraintStream<A,​B,​C,​D>` | TriConstraintStreamHelper.`doJoin​(Class<D> otherClass, QuadJoiner<A,​B,​C,​D>... joiners)` |
    `protected QuadPredicate<A,​B,​C,​D>` | TriConstraintStreamHelper.`extractPredicate​(QuadJoiner<A,​B,​C,​D> joiner)` |
    `protected boolean` | TriConstraintStreamHelper.`isFilteringJoiner​(QuadJoiner<A,​B,​C,​D> joiner)` |
    `protected QuadJoiner<A,​B,​C,​D>` | TriConstraintStreamHelper.`mergeJoiners​(QuadJoiner<A,​B,​C,​D>... joiners)` |