我正在将大量C#代码移植到Java,并且不得不处理类似的表达式:
if (schedules.Where(s = > s.IsStillRelevantOn(calculatedDate)).Count() <= 0)
是否有首选方法可以执行此操作,还是应该循环执行schedules
(在本例中)执行必要的测试?
答案 0 :(得分:0)
我无法编译,因为我没有原始代码,但它会是这样的
List<Schedule> matches = new ArrayList<Schedule>();
for(int x = 0; x < schedules.size(); x++){
if(schedules[x].IsStillRelevantOn(calculatedDate))
matches.add(schedules[x]);
}
if(matches.size() <= 0){
//This is where you want your code
}
答案 1 :(得分:0)
请注意,原始代码和天真翻译都不是很有效。它们都执行计数以检查它是否为空(参见this SO question)。在您的示例中,您实际上并不需要已过滤的列表,因此您可以执行以下操作:
bool hasElement = false;
for(int i = 0; !hasElement && i < schedules.size(); i++) {
if(schedules[i].IsStillRelevantOn(calculatedDate))
hasElement = true;
}
if (!hasElement) {
// sequence is empty
}