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

- Packages that use BiJoiner
  Package | Description
  --- | ---
  org.optaplanner.core.api.score.stream |
  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.common |
  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()` | As defined by `Joiners.equal(Function)` with `Function.identity()` as the argument.
    `static <A,​Property_> BiJoiner<A,​A>` | Joiners.`equal​(Function<A,​Property_> mapping)` | As defined by `Joiners.equal(Function, Function)` with both arguments using the same mapping.
    `static <A,​B,​Property_> BiJoiner<A,​B>` | Joiners.`equal​(Function<A,​Property_> leftMapping, Function<B,​Property_> rightMapping)` | Joins every A and B that share a property.
    `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)` | As defined by `Joiners.greaterThan(Function, Function)` with both arguments using the same mapping.
    `static <A,​B,​Property_ extends Comparable<Property_>> BiJoiner<A,​B>` | Joiners.`greaterThan​(Function<A,​Property_> leftMapping, Function<B,​Property_> rightMapping)` | Joins every A and B where a value of property on A is greater than the value of a property on B.
    `static <A,​Property_ extends Comparable<Property_>> BiJoiner<A,​A>` | Joiners.`greaterThanOrEqual​(Function<A,​Property_> mapping)` | As defined by `Joiners.greaterThanOrEqual(Function, Function)` with both arguments using the same mapping.
    `static <A,​B,​Property_ extends Comparable<Property_>> BiJoiner<A,​B>` | Joiners.`greaterThanOrEqual​(Function<A,​Property_> leftMapping, Function<B,​Property_> rightMapping)` | Joins every A and B where a value of property on A is greater than or equal to the value of a property on B.
    `static <A,​Property_ extends Comparable<Property_>> BiJoiner<A,​A>` | Joiners.`lessThan​(Function<A,​Property_> mapping)` | As defined by `Joiners.lessThan(Function, Function)` with both arguments using the same mapping.
    `static <A,​B,​Property_ extends Comparable<Property_>> BiJoiner<A,​B>` | Joiners.`lessThan​(Function<A,​Property_> leftMapping, Function<B,​Property_> rightMapping)` | Joins every A and B where a value of property on A is less than the value of a property on B.
    `static <A,​Property_ extends Comparable<Property_>> BiJoiner<A,​A>` | Joiners.`lessThanOrEqual​(Function<A,​Property_> mapping)` | As defined by `Joiners.lessThanOrEqual(Function, Function)` with both arguments using the same mapping.
    `static <A,​B,​Property_ extends Comparable<Property_>> BiJoiner<A,​B>` | Joiners.`lessThanOrEqual​(Function<A,​Property_> leftMapping, Function<B,​Property_> rightMapping)` | Joins every A and B where a value of property on A is less than or equal to the value of a property on B.
    `static <A,​Property_ extends Comparable<Property_>> BiJoiner<A,​A>` | Joiners.`overlapping​(Function<A,​Property_> startMapping, Function<A,​Property_> endMapping)` | Joins every A and B that overlap for an interval which is specified by a start and end property on both A and B.
    `static <A,​B,​Property_ extends Comparable<Property_>> BiJoiner<A,​B>` | Joiners.`overlapping​(Function<A,​Property_> leftStartMapping, Function<A,​Property_> leftEndMapping, Function<B,​Property_> rightStartMapping, Function<B,​Property_> rightEndMapping)` | As defined by `Joiners.overlapping(Function, Function)`.

    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 `Object.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 `Object.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).
    `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 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
    --- | --- | ---
    `<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.common

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

  - ### 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> 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​(UniConstraintStream<B> otherStream, BiJoiner<A,​B> joiner)` |
    `protected BiConstraintStream<A,​B>` | UniConstraintStreamHelper.`doJoin​(UniConstraintStream<B> otherStream, 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)` |