2 回答

TA貢獻1869條經(jīng)驗 獲得超4個贊
您的 System.out.println() 命令位于 for 循環(huán)內(nèi),但位于 else 塊之外。這就是顯示所有日期的原因。
只需將這兩行移到 else 塊內(nèi),您就會得到您想要的輸出。

TA貢獻1796條經(jīng)驗 獲得超4個贊
我很高興你解決了你的問題。我想補充三點。
如果您愿意,可以使用流。
您不應(yīng)該在
Iterator
和 上同時調(diào)用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()已將該日期從列表中刪除。所以你的調(diào)用dateList.remove()什么也不做。這是一種運氣。如果它找到要刪除的元素,則會在后續(xù)調(diào)用時Iterator拋出 a 。除非通過迭代器,否則不允許在迭代集合時修改集合,并且嘗試執(zhí)行此操作的結(jié)果是未定義的。因此,請從代碼中刪除該調(diào)用。ConcurrentModificationExceptionhasNext()
3. 你的代碼出了什么問題?你的輸出看起來很有趣。對于被阻止的日子FRIDAY是與日期一起打印的,即星期幾和日期不匹配。發(fā)生的情況是:您正確設(shè)置了date列表中的日期。由于這一天是封鎖日,您執(zhí)行了if該語句的一部分if,從列表中刪除了該日期。您沒有執(zhí)行該else部分,因此day與上一次迭代相比沒有變化FRIDAY。if您無條件打印的語句后date,封鎖日期(依次為2019-09-21、2019-09-22和2019-09-23),以及day(FRIDAY每次)。
添加回答
舉報