3 回答
TA贡献1757条经验 获得超8个赞
您的代码中有一个 IF 和一个 IF-ElSE,这是有意的还是您错过了那里的“其他”?如果没有这个“else”,您可能会在迭代中多次调用 iter.remove() 。
**if(dateNow.isAfter(holder.getEndDate())){ iter.remove(); **
TA贡献1827条经验 获得超4个赞
看起来您可能试图从迭代器中删除相同的元素两次。
我建议将逻辑更改为:
if (dateNow.isBefore(holder.getStartDate())) {
iter.remove();
} else if (dateNow.isAfter(holder.getEndDate())) { // notice the change here
iter.remove();
} else {
boolean status = checkStatus(holder);
if(!status){
iter.remove();
}
}
现在,如果第一个条件为真(并被iter.remove()调用),else则不会执行该子句。
我还建议避免NullPointerException而不是抓住它。例如:
if (holder.getStartDate() != null && dateNow.isBefore(holder.getStartDate())){
iter.remove();
} else if(holder.getEndDate() != null && dateNow.isAfter(holder.getEndDate())){
iter.remove();
} else if (!checkStatus(holder)) {
iter.remove();
}
TA贡献1810条经验 获得超4个赞
我不确定你的任务,这段代码能解决你的问题吗?
contacts.stream().filter(x -> {
if (dateNow.isBefore(holder.getStartDate()) || dateNow.isAfter(holder.getEndDate()) ){
return false;
}
boolean status = chackStatus(x);
if (!status){
return false;
}
return true;
}).collect(Collectors.toList());
添加回答
举报