2 回答
TA贡献1869条经验 获得超4个赞
您的 System.out.println() 命令位于 for 循环内,但位于 else 块之外。这就是显示所有日期的原因。
只需将这两行移到 else 块内,您就会得到您想要的输出。
TA贡献1796条经验 获得超4个赞
我很高兴你解决了你的问题。我想补充三点。
如果您愿意,可以使用流。
您不应该在
Iterator
和 上同时调用removeList
。我对你的代码出了什么问题的解释。
1.您可以使用流。在 Java 9 及更高版本中最简单:
LocalDate begin = LocalDate.of(2019, Month.SEPTEMBER, 17);
LocalDate end = LocalDate.of(2019, Month.SEPTEMBER, 24);
final Set<DayOfWeek> blockedDays = EnumSet.of(DayOfWeek.MONDAY, DayOfWeek.SATURDAY, DayOfWeek.SUNDAY);
List<LocalDate> dateList = begin.datesUntil(end.plusDays(1))
.filter(ld -> ! blockedDays.contains(ld.getDayOfWeek()))
.collect(Collectors.toList());
dateList.forEach(ld -> {
System.out.println(ld.getDayOfWeek());
System.out.println(ld);
});
输出是:
TUESDAY
2019-09-17
WEDNESDAY
2019-09-18
THURSDAY
2019-09-19
FRIDAY
2019-09-20
TUESDAY
2019-09-24
2.不要打电话dateList.remove()。您拨打的电话iterator.remove()已将该日期从列表中删除。所以你的调用dateList.remove()什么也不做。这是一种运气。如果它找到要删除的元素,则会在后续调用时Iterator抛出 a 。除非通过迭代器,否则不允许在迭代集合时修改集合,并且尝试执行此操作的结果是未定义的。因此,请从代码中删除该调用。ConcurrentModificationExceptionhasNext()
3. 你的代码出了什么问题?你的输出看起来很有趣。对于被阻止的日子FRIDAY是与日期一起打印的,即星期几和日期不匹配。发生的情况是:您正确设置了date列表中的日期。由于这一天是封锁日,您执行了if该语句的一部分if,从列表中删除了该日期。您没有执行该else部分,因此day与上一次迭代相比没有变化FRIDAY。if您无条件打印的语句后date,封锁日期(依次为2019-09-21、2019-09-22和2019-09-23),以及day(FRIDAY每次)。
添加回答
举报