Interface ConstraintFactory
-
- All Known Implementing Classes:
BavetConstraintFactory,DroolsConstraintFactory,InnerConstraintFactory
public interface ConstraintFactoryThe factory to create everyConstraintStream(for example withforEach(Class)) which ends in aConstraintreturned byConstraintProvider.defineConstraints(ConstraintFactory).
-
-
Method Summary
All Methods Instance Methods Abstract Methods Default Methods Deprecated Methods Modifier and Type Method Description <A> UniConstraintStream<A>forEach(Class<A> sourceClass)Start aConstraintStreamof all instances of the sourceClass that are known asproblem factsorplanning entities.<A> UniConstraintStream<A>forEachIncludingNullVars(Class<A> sourceClass)As defined byforEach(Class), but without any filtering of nullplanning entityvariables.default <A> BiConstraintStream<A,A>forEachUniquePair(Class<A> sourceClass)Create a newBiConstraintStreamfor every unique combination of A and another A with a higherPlanningId.<A> BiConstraintStream<A,A>forEachUniquePair(Class<A> sourceClass, BiJoiner<A,A> joiner)Create a newBiConstraintStreamfor every unique combination of A and another A with a higherPlanningIdfor which theBiJoineris true (for the properties it extracts from both facts).default <A> BiConstraintStream<A,A>forEachUniquePair(Class<A> sourceClass, BiJoiner<A,A>... joiners)As defined byforEachUniquePair(Class, BiJoiner).default <A> BiConstraintStream<A,A>forEachUniquePair(Class<A> sourceClass, BiJoiner<A,A> joiner1, BiJoiner<A,A> joiner2)As defined byfromUniquePair(Class, BiJoiner).default <A> BiConstraintStream<A,A>forEachUniquePair(Class<A> sourceClass, BiJoiner<A,A> joiner1, BiJoiner<A,A> joiner2, BiJoiner<A,A> joiner3)As defined byfromUniquePair(Class, BiJoiner).default <A> BiConstraintStream<A,A>forEachUniquePair(Class<A> sourceClass, BiJoiner<A,A> joiner1, BiJoiner<A,A> joiner2, BiJoiner<A,A> joiner3, BiJoiner<A,A> joiner4)As defined byfromUniquePair(Class, BiJoiner).<A> UniConstraintStream<A>from(Class<A> fromClass)Deprecated, for removal: This API element is subject to removal in a future version.This method is deprecated in favor offorEach(Class), which exhibits the same behavior for both nullable and non-nullable planning variables.<A> UniConstraintStream<A>fromUnfiltered(Class<A> fromClass)Deprecated, for removal: This API element is subject to removal in a future version.in favor offorEachIncludingNullVars(Class).default <A> BiConstraintStream<A,A>fromUniquePair(Class<A> fromClass)Deprecated, for removal: This API element is subject to removal in a future version.in favor offorEachUniquePair(Class), which exhibits the same behavior for both nullable and non-nullable planning variables.<A> BiConstraintStream<A,A>fromUniquePair(Class<A> fromClass, BiJoiner<A,A> joiner)Deprecated, for removal: This API element is subject to removal in a future version.in favor offorEachUniquePair(Class, BiJoiner), which exhibits the same behavior for both nullable and non-nullable planning variables.default <A> BiConstraintStream<A,A>fromUniquePair(Class<A> fromClass, BiJoiner<A,A>... joiners)Deprecated, for removal: This API element is subject to removal in a future version.in favor offorEachUniquePair(Class, BiJoiner...), which exhibits the same behavior for both nullable and non-nullable planning variables.default <A> BiConstraintStream<A,A>fromUniquePair(Class<A> fromClass, BiJoiner<A,A> joiner1, BiJoiner<A,A> joiner2)Deprecated, for removal: This API element is subject to removal in a future version.in favor offorEachUniquePair(Class, BiJoiner, BiJoiner), which exhibits the same behavior for both nullable and non-nullable planning variables.default <A> BiConstraintStream<A,A>fromUniquePair(Class<A> fromClass, BiJoiner<A,A> joiner1, BiJoiner<A,A> joiner2, BiJoiner<A,A> joiner3)Deprecated, for removal: This API element is subject to removal in a future version.in favor offorEachUniquePair(Class, BiJoiner, BiJoiner, BiJoiner), which exhibits the same behavior for both nullable and non-nullable planning variables.default <A> BiConstraintStream<A,A>fromUniquePair(Class<A> fromClass, BiJoiner<A,A> joiner1, BiJoiner<A,A> joiner2, BiJoiner<A,A> joiner3, BiJoiner<A,A> joiner4)Deprecated, for removal: This API element is subject to removal in a future version.in favor offorEachUniquePair(Class, BiJoiner, BiJoiner, BiJoiner, BiJoiner), which exhibits the same behavior for both nullable and non-nullable planning variables.StringgetDefaultConstraintPackage()This isConstraintConfiguration.constraintPackage()if available, otherwise the package of thePlanningSolutionclass.
-
-
-
Method Detail
-
getDefaultConstraintPackage
String getDefaultConstraintPackage()
This isConstraintConfiguration.constraintPackage()if available, otherwise the package of thePlanningSolutionclass.- Returns:
- never null
-
forEach
<A> UniConstraintStream<A> forEach(Class<A> sourceClass)
Start aConstraintStreamof all instances of the sourceClass that are known asproblem factsorplanning entities.If the sourceClass is a
PlanningEntity, then it is automaticallyfilteredto only contain entities for which each genuinePlanningVariable(of the sourceClass or a superclass thereof) has a non-null value.- Type Parameters:
A- the type of the matched problem fact orplanning entity- Parameters:
sourceClass- never null- Returns:
- never null
-
forEachIncludingNullVars
<A> UniConstraintStream<A> forEachIncludingNullVars(Class<A> sourceClass)
As defined byforEach(Class), but without any filtering of nullplanning entityvariables.- Type Parameters:
A- the type of the matched problem fact orplanning entity- Parameters:
sourceClass- never null- Returns:
- never null
-
forEachUniquePair
default <A> BiConstraintStream<A,A> forEachUniquePair(Class<A> sourceClass)
Create a newBiConstraintStreamfor every unique combination of A and another A with a higherPlanningId.Important:
Filteringthis is slower and less scalable than using ajoiner, because it barely applies hashing and/or indexing on the properties, so it creates and checks almost every combination of A and A.This method is syntactic sugar for
UniConstraintStream.join(Class). It automatically adds alessThanjoiner on thePlanningIdof A.- Type Parameters:
A- the type of the matched problem fact orplanning entity- Parameters:
sourceClass- never null- Returns:
- a stream that matches every unique combination of A and another A
-
forEachUniquePair
<A> BiConstraintStream<A,A> forEachUniquePair(Class<A> sourceClass, BiJoiner<A,A> joiner)
Create a newBiConstraintStreamfor every unique combination of A and another A with a higherPlanningIdfor which theBiJoineris true (for the properties it extracts from both facts).Important: This is faster and more scalable than not using a
forEachUniquePair(Class)joiner} followed by afilter, because it applies hashing and/or indexing on the properties, so it doesn't create nor checks almost every combination of A and A.This method is syntactic sugar for
UniConstraintStream.join(Class, BiJoiner). It automatically adds alessThanjoiner on thePlanningIdof A.This method has overloaded methods with multiple
BiJoinerparameters.- Type Parameters:
A- the type of the matched problem fact orplanning entity- Parameters:
sourceClass- never nulljoiner- never null- Returns:
- a stream that matches every unique combination of A and another A for which the
BiJoineris true
-
forEachUniquePair
default <A> BiConstraintStream<A,A> forEachUniquePair(Class<A> sourceClass, BiJoiner<A,A> joiner1, BiJoiner<A,A> joiner2)
As defined byfromUniquePair(Class, BiJoiner).- Type Parameters:
A- the type of the matched problem fact orplanning entity- Parameters:
sourceClass- never nulljoiner1- never nulljoiner2- never null- Returns:
- a stream that matches every unique combination of A and another A for which all the
joinersare true
-
forEachUniquePair
default <A> BiConstraintStream<A,A> forEachUniquePair(Class<A> sourceClass, BiJoiner<A,A> joiner1, BiJoiner<A,A> joiner2, BiJoiner<A,A> joiner3)
As defined byfromUniquePair(Class, BiJoiner).- Type Parameters:
A- the type of the matched problem fact orplanning entity- Parameters:
sourceClass- never nulljoiner1- never nulljoiner2- never nulljoiner3- never null- Returns:
- a stream that matches every unique combination of A and another A for which all the
joinersare true
-
forEachUniquePair
default <A> BiConstraintStream<A,A> forEachUniquePair(Class<A> sourceClass, BiJoiner<A,A> joiner1, BiJoiner<A,A> joiner2, BiJoiner<A,A> joiner3, BiJoiner<A,A> joiner4)
As defined byfromUniquePair(Class, BiJoiner).- Type Parameters:
A- the type of the matched problem fact orplanning entity- Parameters:
sourceClass- never nulljoiner1- never nulljoiner2- never nulljoiner3- never nulljoiner4- never null- Returns:
- a stream that matches every unique combination of A and another A for which all the
joinersare true
-
forEachUniquePair
default <A> BiConstraintStream<A,A> forEachUniquePair(Class<A> sourceClass, BiJoiner<A,A>... joiners)
As defined byforEachUniquePair(Class, BiJoiner).This method causes Unchecked generics array creation for varargs parameter warnings, but we can't fix it with a
SafeVarargsannotation because it's an interface method. Therefore, there are overloaded methods with up to 4BiJoinerparameters.- Type Parameters:
A- the type of the matched problem fact orplanning entity- Parameters:
sourceClass- never nulljoiners- never null- Returns:
- a stream that matches every unique combination of A and another A for which all the
joinersare true
-
from
@Deprecated(forRemoval=true) <A> UniConstraintStream<A> from(Class<A> fromClass)
Deprecated, for removal: This API element is subject to removal in a future version.This method is deprecated in favor offorEach(Class), which exhibits the same behavior for both nullable and non-nullable planning variables.This method is deprecated. Migrate uses of this method toforEach(Class), but first understand this:- If none of your
planning variablesare explicitly set to nullable=true, then the replacement byforEach(Class)has little to no impact. Subsequent conditional propagation calls (UniConstraintStream.ifExists(java.lang.Class<B>, org.optaplanner.core.api.score.stream.bi.BiJoiner<A, B>)etc.) will now also filter out planning entities with null variables, consistently withforEach(Class)family of methods and with joining. - If any of your
planning variablesare nullable=true, then there is severe impact. Calls to theforEach(Class)family of methods will now filter out planning entities with null variables, so most constraints no longer need to do null checks, but the constraint that penalizes unassigned entities (typically a medium constraint) must now useforEachIncludingNullVars(Class)instead. Subsequent joins and conditional propagation calls will now also consistently filter out planning entities with null variables.
The original Javadoc of this method follows:
Start a
ConstraintStreamof all instances of the fromClass that are known asproblem factsorplanning entities.If the fromClass is a
PlanningEntity, then it is automaticallyfilteredto only contain fully initialized entities, for which each genuinePlanningVariable(of the fromClass or a superclass thereof) is initialized. This filtering will NOT automatically apply to genuine planning variables of subclass planning entities of the fromClass.- Type Parameters:
A- the type of the matched problem fact orplanning entity- Parameters:
fromClass- never null- Returns:
- never null
- If none of your
-
fromUnfiltered
@Deprecated(forRemoval=true) <A> UniConstraintStream<A> fromUnfiltered(Class<A> fromClass)
Deprecated, for removal: This API element is subject to removal in a future version.in favor offorEachIncludingNullVars(Class).This method is deprecated. Migrate uses of this method toforEachIncludingNullVars(Class), but first understand that subsequent joins and conditional propagation calls (UniConstraintStream.ifExists(java.lang.Class<B>, org.optaplanner.core.api.score.stream.bi.BiJoiner<A, B>)etc.) will now also consistently filter out planning entities with null variables.The original Javadoc of this method follows:
As defined by
from(Class), but without any filtering of uninitializedplanning entities.- Type Parameters:
A- the type of the matched problem fact orplanning entity- Parameters:
fromClass- never null- Returns:
- never null
-
fromUniquePair
@Deprecated(forRemoval=true) default <A> BiConstraintStream<A,A> fromUniquePair(Class<A> fromClass)
Deprecated, for removal: This API element is subject to removal in a future version.in favor offorEachUniquePair(Class), which exhibits the same behavior for both nullable and non-nullable planning variables.This method is deprecated. Migrate uses of this method toforEachUniquePair(Class), but first understand that the same precautions apply as with the use offrom(Class).The original Javadoc of this method follows:
Create a new
BiConstraintStreamfor every unique combination of A and another A with a higherPlanningId.Important:
Filteringthis is slower and less scalable than using ajoiner, because it barely applies hashing and/or indexing on the properties, so it creates and checks almost every combination of A and A.This method is syntactic sugar for
UniConstraintStream.join(Class). It automatically adds alessThanjoiner on thePlanningIdof A.- Type Parameters:
A- the type of the matched problem fact orplanning entity- Parameters:
fromClass- never null- Returns:
- a stream that matches every unique combination of A and another A
-
fromUniquePair
@Deprecated(forRemoval=true) <A> BiConstraintStream<A,A> fromUniquePair(Class<A> fromClass, BiJoiner<A,A> joiner)
Deprecated, for removal: This API element is subject to removal in a future version.in favor offorEachUniquePair(Class, BiJoiner), which exhibits the same behavior for both nullable and non-nullable planning variables.This method is deprecated. Migrate uses of this method toforEachUniquePair(Class, BiJoiner), but first understand that the same precautions apply as with the use offrom(Class).The original Javadoc of this method follows:
Create a new
BiConstraintStreamfor every unique combination of A and another A with a higherPlanningIdfor which theBiJoineris true (for the properties it extracts from both facts).Important: This is faster and more scalable than not using a
fromUniquePair(Class)joiner} followed by afilter, because it applies hashing and/or indexing on the properties, so it doesn't create nor checks almost every combination of A and A.This method is syntactic sugar for
UniConstraintStream.join(Class, BiJoiner). It automatically adds alessThanjoiner on thePlanningIdof A.This method has overloaded methods with multiple
BiJoinerparameters.- Type Parameters:
A- the type of the matched problem fact orplanning entity- Parameters:
fromClass- never nulljoiner- never null- Returns:
- a stream that matches every unique combination of A and another A for which the
BiJoineris true
-
fromUniquePair
@Deprecated(forRemoval=true) default <A> BiConstraintStream<A,A> fromUniquePair(Class<A> fromClass, BiJoiner<A,A> joiner1, BiJoiner<A,A> joiner2)
Deprecated, for removal: This API element is subject to removal in a future version.in favor offorEachUniquePair(Class, BiJoiner, BiJoiner), which exhibits the same behavior for both nullable and non-nullable planning variables.This method is deprecated. Migrate uses of this method toforEachUniquePair(Class, BiJoiner, BiJoiner), but first understand that the same precautions apply as with the use offrom(Class).The original Javadoc of this method follows:
As defined by
fromUniquePair(Class, BiJoiner).- Type Parameters:
A- the type of the matched problem fact orplanning entity- Parameters:
fromClass- never nulljoiner1- never nulljoiner2- never null- Returns:
- a stream that matches every unique combination of A and another A for which all the
joinersare true
-
fromUniquePair
@Deprecated(forRemoval=true) default <A> BiConstraintStream<A,A> fromUniquePair(Class<A> fromClass, BiJoiner<A,A> joiner1, BiJoiner<A,A> joiner2, BiJoiner<A,A> joiner3)
Deprecated, for removal: This API element is subject to removal in a future version.in favor offorEachUniquePair(Class, BiJoiner, BiJoiner, BiJoiner), which exhibits the same behavior for both nullable and non-nullable planning variables.This method is deprecated. Migrate uses of this method toforEachUniquePair(Class, BiJoiner, BiJoiner, BiJoiner), but first understand that the same precautions apply as with the use offrom(Class).The original Javadoc of this method follows:
As defined by
fromUniquePair(Class, BiJoiner).- Type Parameters:
A- the type of the matched problem fact orplanning entity- Parameters:
fromClass- never nulljoiner1- never nulljoiner2- never nulljoiner3- never null- Returns:
- a stream that matches every unique combination of A and another A for which all the
joinersare true
-
fromUniquePair
@Deprecated(forRemoval=true) default <A> BiConstraintStream<A,A> fromUniquePair(Class<A> fromClass, BiJoiner<A,A> joiner1, BiJoiner<A,A> joiner2, BiJoiner<A,A> joiner3, BiJoiner<A,A> joiner4)
Deprecated, for removal: This API element is subject to removal in a future version.in favor offorEachUniquePair(Class, BiJoiner, BiJoiner, BiJoiner, BiJoiner), which exhibits the same behavior for both nullable and non-nullable planning variables.This method is deprecated. Migrate uses of this method toforEachUniquePair(Class, BiJoiner, BiJoiner, BiJoiner, BiJoiner), but first understand that the same precautions apply as with the use offrom(Class).The original Javadoc of this method follows:
As defined by
fromUniquePair(Class, BiJoiner).- Type Parameters:
A- the type of the matched problem fact orplanning entity- Parameters:
fromClass- never nulljoiner1- never nulljoiner2- never nulljoiner3- never nulljoiner4- never null- Returns:
- a stream that matches every unique combination of A and another A for which all the
joinersare true
-
fromUniquePair
@Deprecated(forRemoval=true) default <A> BiConstraintStream<A,A> fromUniquePair(Class<A> fromClass, BiJoiner<A,A>... joiners)
Deprecated, for removal: This API element is subject to removal in a future version.in favor offorEachUniquePair(Class, BiJoiner...), which exhibits the same behavior for both nullable and non-nullable planning variables.This method is deprecated. Migrate uses of this method toforEachUniquePair(Class, BiJoiner...), but first understand that the same precautions apply as with the use offrom(Class).The original Javadoc of this method follows:
As defined by
fromUniquePair(Class, BiJoiner).This method causes Unchecked generics array creation for varargs parameter warnings, but we can't fix it with a
SafeVarargsannotation because it's an interface method. Therefore, there are overloaded methods with up to 4BiJoinerparameters.- Type Parameters:
A- the type of the matched problem fact orplanning entity- Parameters:
fromClass- never nulljoiners- never null- Returns:
- a stream that matches every unique combination of A and another A for which all the
joinersare true
-
-