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

- Packages that use BiJoiner
  Package | Description
  --- | ---
  org.optaplanner.core.api.score.stream | The `ConstraintStream` API: a way to define constraints for `Score` calculation.
  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.uni |
  org.optaplanner.core.impl.score.stream.bi |
  org.optaplanner.core.impl.score.stream.drools.bi |
  org.optaplanner.core.impl.score.stream.drools.uni |
  org.optaplanner.core.impl.score.stream.uni |

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

    Methods in org.optaplanner.core.api.score.stream that return BiJoiner
    Modifier and Type | Method | Description
    --- | --- | ---
    `static <A> BiJoiner<A,​A>` | Joiners.`equal()` |
    `static <A,​Property_> BiJoiner<A,​A>` | Joiners.`equal​(Function<A,​Property_> mapping)` |
    `static <A,​B,​Property_> BiJoiner<A,​B>` | Joiners.`equal​(Function<A,​Property_> leftMapping, Function<B,​Property_> rightMapping)` |
    `static <A,​B> BiJoiner<A,​B>` | Joiners.`filtering​(BiPredicate<A,​B> filter)` | Applies a filter to the joined tuple, with the semantics of `BiConstraintStream.filter(BiPredicate)`.
    `static <A,​Property_ extends Comparable<Property_>> BiJoiner<A,​A>` | Joiners.`greaterThan​(Function<A,​Property_> mapping)` |
    `static <A,​B,​Property_ extends Comparable<Property_>> BiJoiner<A,​B>` | Joiners.`greaterThan​(Function<A,​Property_> leftMapping, Function<B,​Property_> rightMapping)` |
    `static <A,​Property_ extends Comparable<Property_>> BiJoiner<A,​A>` | Joiners.`greaterThanOrEqual​(Function<A,​Property_> mapping)` |
    `static <A,​B,​Property_ extends Comparable<Property_>> BiJoiner<A,​B>` | Joiners.`greaterThanOrEqual​(Function<A,​Property_> leftMapping, Function<B,​Property_> rightMapping)` |
    `static <A,​Property_ extends Comparable<Property_>> BiJoiner<A,​A>` | Joiners.`lessThan​(Function<A,​Property_> mapping)` |
    `static <A,​B,​Property_ extends Comparable<Property_>> BiJoiner<A,​B>` | Joiners.`lessThan​(Function<A,​Property_> leftMapping, Function<B,​Property_> rightMapping)` |
    `static <A,​Property_ extends Comparable<Property_>> BiJoiner<A,​A>` | Joiners.`lessThanOrEqual​(Function<A,​Property_> mapping)` |
    `static <A,​B,​Property_ extends Comparable<Property_>> BiJoiner<A,​B>` | Joiners.`lessThanOrEqual​(Function<A,​Property_> leftMapping, Function<B,​Property_> rightMapping)` |

    Methods in org.optaplanner.core.api.score.stream with parameters of type BiJoiner
    Modifier and Type | Method | Description
    --- | --- | ---
    `<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 BiJoiner in org.optaplanner.core.api.score.stream.uni

    Methods in org.optaplanner.core.api.score.stream.uni with parameters of type BiJoiner
    Modifier and Type | Method | Description
    --- | --- | ---
    `default <B> UniConstraintStream<A>` | UniConstraintStream.`ifExists​(Class<B> otherClass, BiJoiner<A,​B> joiner)` | Create a new `UniConstraintStream` for every A where B exists for which the `BiJoiner` is true (for the properties it extracts from both facts).
    `<B> UniConstraintStream<A>` | UniConstraintStream.`ifExists​(Class<B> otherClass, BiJoiner<A,​B>... joiners)` | As defined by `UniConstraintStream.ifExists(Class, BiJoiner)`.
    `default <B> UniConstraintStream<A>` | UniConstraintStream.`ifExists​(Class<B> otherClass, BiJoiner<A,​B> joiner1, BiJoiner<A,​B> joiner2)` | As defined by `UniConstraintStream.ifExists(Class, BiJoiner)`.
    `default <B> UniConstraintStream<A>` | UniConstraintStream.`ifExists​(Class<B> otherClass, BiJoiner<A,​B> joiner1, BiJoiner<A,​B> joiner2, BiJoiner<A,​B> joiner3)` | As defined by `UniConstraintStream.ifExists(Class, BiJoiner)`.
    `default <B> UniConstraintStream<A>` | UniConstraintStream.`ifExists​(Class<B> otherClass, BiJoiner<A,​B> joiner1, BiJoiner<A,​B> joiner2, BiJoiner<A,​B> joiner3, BiJoiner<A,​B> joiner4)` | As defined by `UniConstraintStream.ifExists(Class, BiJoiner)`.
    `default UniConstraintStream<A>` | UniConstraintStream.`ifExistsOther​(Class<A> otherClass, BiJoiner<A,​A> joiner)` | Create a new `UniConstraintStream` for every A, if another A exists that does not `#equals(Object)` the first, and for which the `BiJoiner` is true (for the properties it extracts from both facts).
    `default UniConstraintStream<A>` | UniConstraintStream.`ifExistsOther​(Class<A> otherClass, BiJoiner<A,​A>... joiners)` | As defined by `UniConstraintStream.ifExistsOther(Class, BiJoiner)`.
    `default UniConstraintStream<A>` | UniConstraintStream.`ifExistsOther​(Class<A> otherClass, BiJoiner<A,​A> joiner1, BiJoiner<A,​A> joiner2)` | As defined by `UniConstraintStream.ifExistsOther(Class, BiJoiner)`.
    `default UniConstraintStream<A>` | UniConstraintStream.`ifExistsOther​(Class<A> otherClass, BiJoiner<A,​A> joiner1, BiJoiner<A,​A> joiner2, BiJoiner<A,​A> joiner3)` | As defined by `UniConstraintStream.ifExistsOther(Class, BiJoiner)`.
    `default UniConstraintStream<A>` | UniConstraintStream.`ifExistsOther​(Class<A> otherClass, BiJoiner<A,​A> joiner1, BiJoiner<A,​A> joiner2, BiJoiner<A,​A> joiner3, BiJoiner<A,​A> joiner4)` | As defined by `UniConstraintStream.ifExistsOther(Class, BiJoiner)`.
    `default <B> UniConstraintStream<A>` | UniConstraintStream.`ifNotExists​(Class<B> otherClass, BiJoiner<A,​B> joiner)` | Create a new `UniConstraintStream` for every A where B does not exist for which the `BiJoiner` is true (for the properties it extracts from both facts).
    `<B> UniConstraintStream<A>` | UniConstraintStream.`ifNotExists​(Class<B> otherClass, BiJoiner<A,​B>... joiners)` | As defined by `UniConstraintStream.ifNotExists(Class, BiJoiner)`.
    `default <B> UniConstraintStream<A>` | UniConstraintStream.`ifNotExists​(Class<B> otherClass, BiJoiner<A,​B> joiner1, BiJoiner<A,​B> joiner2)` | As defined by `UniConstraintStream.ifNotExists(Class, BiJoiner)`.
    `default <B> UniConstraintStream<A>` | UniConstraintStream.`ifNotExists​(Class<B> otherClass, BiJoiner<A,​B> joiner1, BiJoiner<A,​B> joiner2, BiJoiner<A,​B> joiner3)` | As defined by `UniConstraintStream.ifNotExists(Class, BiJoiner)`.
    `default <B> UniConstraintStream<A>` | UniConstraintStream.`ifNotExists​(Class<B> otherClass, BiJoiner<A,​B> joiner1, BiJoiner<A,​B> joiner2, BiJoiner<A,​B> joiner3, BiJoiner<A,​B> joiner4)` | As defined by `UniConstraintStream.ifNotExists(Class, BiJoiner)`.
    `default UniConstraintStream<A>` | UniConstraintStream.`ifNotExistsOther​(Class<A> otherClass, BiJoiner<A,​A> joiner)` | Create a new `UniConstraintStream` for every A, if no other A exists that does not `#equals(Object)` the first, and for which the `BiJoiner` is true (for the properties it extracts from both facts).
    `default UniConstraintStream<A>` | UniConstraintStream.`ifNotExistsOther​(Class<A> otherClass, BiJoiner<A,​A>... joiners)` | As defined by `UniConstraintStream.ifNotExistsOther(Class, BiJoiner)`.
    `default UniConstraintStream<A>` | UniConstraintStream.`ifNotExistsOther​(Class<A> otherClass, BiJoiner<A,​A> joiner1, BiJoiner<A,​A> joiner2)` | As defined by `UniConstraintStream.ifNotExistsOther(Class, BiJoiner)`.
    `default UniConstraintStream<A>` | UniConstraintStream.`ifNotExistsOther​(Class<A> otherClass, BiJoiner<A,​A> joiner1, BiJoiner<A,​A> joiner2, BiJoiner<A,​A> joiner3)` | As defined by `UniConstraintStream.ifNotExistsOther(Class, BiJoiner)`.
    `default UniConstraintStream<A>` | UniConstraintStream.`ifNotExistsOther​(Class<A> otherClass, BiJoiner<A,​A> joiner1, BiJoiner<A,​A> joiner2, BiJoiner<A,​A> joiner3, BiJoiner<A,​A> joiner4)` | As defined by `UniConstraintStream.ifNotExistsOther(Class, BiJoiner)`.
    `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)`.
    `<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).

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

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

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

    Methods in org.optaplanner.core.impl.score.stream.bavet.uni with parameters of type BiJoiner
    Modifier and Type | Method | Description
    --- | --- | ---
    `<B> UniConstraintStream<A>` | BavetAbstractUniConstraintStream.`ifExists​(Class<B> otherClass, BiJoiner<A,​B>... joiners)` |
    `<B> UniConstraintStream<A>` | BavetAbstractUniConstraintStream.`ifNotExists​(Class<B> otherClass, BiJoiner<A,​B>... joiners)` |
    `<B> BiConstraintStream<A,​B>` | BavetAbstractUniConstraintStream.`join​(UniConstraintStream<B> otherStream, BiJoiner<A,​B> joiner)` |

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

    Classes in org.optaplanner.core.impl.score.stream.bi that implement BiJoiner
    Modifier and Type | Class | Description
    --- | --- | ---
    `class` | `AbstractBiJoiner<A,​B>` |
    `class` | `CompositeBiJoiner<A,​B>` |
    `class` | `FilteringBiJoiner<A,​B>` |
    `class` | `NoneBiJoiner<A,​B>` |
    `class` | `SingleBiJoiner<A,​B>` |

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

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

    Constructors in org.optaplanner.core.impl.score.stream.drools.bi with parameters of type BiJoiner
    Constructor | Description
    --- | ---
    `DroolsJoinBiConstraintStream​(DroolsConstraintFactory<Solution_> constraintFactory, DroolsAbstractUniConstraintStream<Solution_,​A> parent, DroolsAbstractUniConstraintStream<Solution_,​B> otherStream, BiJoiner<A,​B> biJoiner)` |

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

    Methods in org.optaplanner.core.impl.score.stream.drools.uni with parameters of type BiJoiner
    Modifier and Type | Method | Description
    --- | --- | ---
    `<B> DroolsUniCondition<A,​PatternVar>` | DroolsUniCondition.`andIfExists​(Class<B> otherClass, BiJoiner<A,​B>... biJoiners)` |
    `<B> DroolsUniCondition<A,​PatternVar>` | DroolsUniCondition.`andIfNotExists​(Class<B> otherClass, BiJoiner<A,​B>... biJoiners)` |
    `<B> UniConstraintStream<A>` | DroolsAbstractUniConstraintStream.`ifExists​(Class<B> otherClass, BiJoiner<A,​B>... joiners)` |
    `<B> UniConstraintStream<A>` | DroolsAbstractUniConstraintStream.`ifNotExists​(Class<B> otherClass, BiJoiner<A,​B>... joiners)` |
    `<B> BiConstraintStream<A,​B>` | DroolsAbstractUniConstraintStream.`join​(UniConstraintStream<B> otherStream, BiJoiner<A,​B> joiner)` |

    Constructors in org.optaplanner.core.impl.score.stream.drools.uni with parameters of type BiJoiner
    Constructor | Description
    --- | ---
    `DroolsExistsUniConstraintStream​(DroolsConstraintFactory<Solution_> constraintFactory, DroolsAbstractUniConstraintStream<Solution_,​A> parent, boolean shouldExist, Class<B> otherClass, BiJoiner<A,​B>... joiners)` |

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

    Methods in org.optaplanner.core.impl.score.stream.uni that return BiJoiner
    Modifier and Type | Method | Description
    --- | --- | ---
    `protected BiJoiner<A,​B>` | UniConstraintStreamHelper.`mergeJoiners​(BiJoiner<A,​B>... joiners)` |

    Methods in org.optaplanner.core.impl.score.stream.uni with parameters of type BiJoiner
    Modifier and Type | Method | Description
    --- | --- | ---
    `protected BiConstraintStream<A,​B>` | UniConstraintStreamHelper.`doJoin​(Class<B> otherClass, BiJoiner<A,​B> joiner)` |
    `protected BiConstraintStream<A,​B>` | UniConstraintStreamHelper.`doJoin​(Class<B> otherClass, BiJoiner<A,​B>... joiners)` |
    `BiPredicate<A,​B>` | UniConstraintStreamHelper.`extractPredicate​(BiJoiner<A,​B> joiner)` |
    `protected boolean` | UniConstraintStreamHelper.`isFilteringJoiner​(BiJoiner<A,​B> joiner)` |
    `protected BiJoiner<A,​B>` | UniConstraintStreamHelper.`mergeJoiners​(BiJoiner<A,​B>... joiners)` |