我有以下功能正常的代码
for (UniversityClass class : allClasses)
{
Period<Date> classDate = class.getClassDates();
if (classDate.start().before(classEndDate)
&& classDate.end().after(classBeginDate))
{
classBooked = true;
break;
}
}
我已经试过了:
allClasses.stream().filter(class -> {
Period<Date> classDate = class.getClassDates();
if (classDate.start().before(classEndDate)
&& classDate.end().after(classBeginDate))
return true;
}).findFirst().ifPresent($ -> {
classBooked = true;
});
但这会添加一个return语句。同样,该classBooked
变量需要声明为final,但是不能这样做。做错了什么?
同样,一旦成真,我就需要break
摆脱它。这就是为什么我想到添加findFirst()。ifPresent()的原因
您可以使用anyMatch
替代的filter
,findFirst
:
classBooked = allClasses.stream()
.anyMatch(c -> {
Period<Date> classDate = c.getClassDates();
return (classDate.start().before(classEndDate) && classDate.end().after(classBeginDate));
});
您可能还map
习惯于提高可读性:
classBooked = allClasses.stream()
.map(UniversityClass::getClassDates)
.anyMatch(d -> d.start().before(classEndDate) && d.end().after(classBeginDate));
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句