我想为强制午休写一个简单的限制。
我在groupby中使用constraintcollector“tolist”,如下所示:
public Constraint lunchBreak(ConstraintFactory constraintFactory) {
return constraintFactory.from(TimetableEntry.class)
.groupBy(TimetableEntry::getPlanningDay, TimetableEntry::getSchoolClass, toList())
.filter((day, schoolClass, entries) -> {
if (entries.size() == 7) {
List<TimetableEntry> freePeriods = entries.stream().filter(
timetableEntry -> timetableEntry.getSubject().getId() == 1L).collect(Collectors.toList()
);
if (freePeriods.size() > 0) {
return false;
}
return true;
}
// todo logic for 8 hours
// todo logic for 9 hours
// todo logic for 10 hours
return false;
})
.penalize("A 7-hour-day must have a lunch break somewhere",
ConstraintConstants.MANDATORY_LUNCH_BREAK_CONFLICT);
}
当我测试约束时(注意条目是一个集合)
this.constraintVerifier.verifyThat(TimetableConstraintProvider::lunchBreak)
.given(entries.toArray())
.penalizesBy(1);
我得到一个“java.lang.classcastexception:class timetableentry不能转换为class java.util.list”。我不明白为什么会这样,因为groupby可以很好地处理count(),但我需要分组列表。
当我用
this.constraintVerifier.verifyThat(TimetableConstraintProvider::lunchBreak)
.given(entries)
.penalizesBy(1);
groupby+筛选器未启动。
1条答案
按热度按时间niknxzdl1#
如注解所述,测试应该如下所示
但是,groupby看起来很好,我找不到导致错误的原因。以下是不知何故没有造成错误,但我不明白为什么。注意第一组基本上什么都不做,但是删除它会导致错误:
缺少第一个group by时的错误堆栈跟踪: