3333import static ai .timefold .solver .core .api .score .stream .ConstraintCollectors .countBi ;
3434import static ai .timefold .solver .core .api .score .stream .ConstraintCollectors .max ;
3535import static ai .timefold .solver .core .api .score .stream .ConstraintCollectors .min ;
36- import static ai .timefold .solver .core .api .score .stream .Joiners .containedIn ;
37- import static ai .timefold .solver .core .api .score .stream .Joiners .containing ;
3836import static ai .timefold .solver .core .api .score .stream .Joiners .equal ;
3937import static ai .timefold .solver .core .api .score .stream .Joiners .filtering ;
4038import static ai .timefold .solver .core .api .score .stream .Joiners .greaterThan ;
41- import static ai .timefold .solver .core .api .score .stream .Joiners .intersecting ;
4239import static ai .timefold .solver .core .api .score .stream .Joiners .lessThan ;
4340import static ai .timefold .solver .core .api .score .stream .Joiners .overlapping ;
41+ import static ai .timefold .solver .core .impl .score .stream .UnfinishedJoiners .containedIn ;
42+ import static ai .timefold .solver .core .impl .score .stream .UnfinishedJoiners .containing ;
43+ import static ai .timefold .solver .core .impl .score .stream .UnfinishedJoiners .containingAnyOf ;
4444
4545import java .time .LocalDate ;
4646import java .time .temporal .ChronoUnit ;
@@ -149,7 +149,7 @@ Constraint talkPrerequisiteTalks(ConstraintFactory factory) {
149149 Constraint talkMutuallyExclusiveTalksTags (ConstraintFactory factory ) {
150150 return factory .forEachUniquePair (Talk .class ,
151151 overlapping (t -> t .getTimeslot ().getStartDateTime (), t -> t .getTimeslot ().getEndDateTime ()),
152- intersecting (Talk ::getMutuallyExclusiveTalksTagSet ))
152+ containingAnyOf (Talk ::getMutuallyExclusiveTalksTagSet ))
153153 .penalize (HardSoftScore .ofHard (1 ),
154154 (talk1 , talk2 ) -> talk2 .overlappingMutuallyExclusiveTalksTagCount (talk1 )
155155 * talk1 .overlappingDurationInMinutes (talk2 ))
@@ -236,7 +236,7 @@ Constraint themeTrackConflict(ConstraintFactory factory) {
236236 Constraint themeTrackRoomStability (ConstraintFactory factory ) {
237237 return factory .forEachUniquePair (Talk .class ,
238238 equal (talk -> talk .getTimeslot ().getStartDateTime ().toLocalDate ()),
239- intersecting (Talk ::getThemeTrackTagSet ),
239+ containingAnyOf (Talk ::getThemeTrackTagSet ),
240240 filtering ((talk1 , talk2 ) -> !talk1 .getRoom ().equals (talk2 .getRoom ())))
241241 .penalize (HardSoftScore .ofSoft (10 ),
242242 (talk1 , talk2 ) -> talk2 .overlappingThemeTrackCount (talk1 ) * talk1 .combinedDurationInMinutes (talk2 ))
@@ -246,7 +246,7 @@ Constraint themeTrackRoomStability(ConstraintFactory factory) {
246246 Constraint sectorConflict (ConstraintFactory factory ) {
247247 return factory .forEachUniquePair (Talk .class ,
248248 overlapping (t -> t .getTimeslot ().getStartDateTime (), t -> t .getTimeslot ().getEndDateTime ()),
249- intersecting (Talk ::getSectorTagSet ))
249+ containingAnyOf (Talk ::getSectorTagSet ))
250250 .penalize (HardSoftScore .ofSoft (10 ),
251251 (talk1 , talk2 ) -> talk2 .overlappingSectorCount (talk1 ) * talk1 .overlappingDurationInMinutes (talk2 ))
252252 .asConstraint (SECTOR_CONFLICT );
@@ -305,7 +305,7 @@ Constraint contentAudienceLevelFlowViolation(ConstraintFactory factory) {
305305 Constraint contentConflict (ConstraintFactory factory ) {
306306 return factory .forEachUniquePair (Talk .class ,
307307 overlapping (t -> t .getTimeslot ().getStartDateTime (), t -> t .getTimeslot ().getEndDateTime ()),
308- intersecting (Talk ::getContentTagSet ))
308+ containingAnyOf (Talk ::getContentTagSet ))
309309 .penalize (HardSoftScore .ofSoft (100 ),
310310 (talk1 , talk2 ) -> talk2 .overlappingContentCount (talk1 )
311311 * talk1 .overlappingDurationInMinutes (talk2 ))
@@ -321,15 +321,15 @@ Constraint languageDiversity(ConstraintFactory factory) {
321321 }
322322
323323 Constraint contentConflictSameDay (ConstraintFactory factory ) {
324- return factory .forEachUniquePair (Talk .class , intersecting (Talk ::getContentTagSet ))
324+ return factory .forEachUniquePair (Talk .class , containingAnyOf (Talk ::getContentTagSet ))
325325 .filter ((talk1 , talk2 ) -> !talk1 .getTimeslot ().isOnSameDayAs (talk2 .getTimeslot ()))
326326 .penalize (HardSoftScore .ofSoft (10 ),
327327 (talk1 , talk2 ) -> talk2 .overlappingContentCount (talk1 ) * talk1 .combinedDurationInMinutes (talk2 ))
328328 .asConstraint (CONTENT_CONFLICT_SAME_DAY_TALKS );
329329 }
330330
331331 Constraint themeTrackConflictSameDay (ConstraintFactory factory ) {
332- return factory .forEachUniquePair (Talk .class , intersecting (Talk ::getThemeTrackTagSet ))
332+ return factory .forEachUniquePair (Talk .class , containingAnyOf (Talk ::getThemeTrackTagSet ))
333333 .filter ((talk1 , talk2 ) -> !talk1 .getTimeslot ().isOnSameDayAs (talk2 .getTimeslot ()))
334334 .penalize (HardSoftScore .ofSoft (10 ),
335335 (talk1 , talk2 ) -> talk2 .overlappingThemeTrackCount (talk1 ) * talk1 .combinedDurationInMinutes (talk2 ))
0 commit comments