JavaFX:删除特殊的一天,同时对其进行分级
我知道,有很多例子说明如何在遍历列表时从列表中删除某些内容,但这不是重点 我正在尝试自动化一个过程,我需要记录我的工作,最终它应该打印成一个文件,比如2019年1月1日-周二。为此,我有一个带有两个日期选择器的UI。在选择两个不同的日期并进行比较之后,我知道这些日期之间有多少天 现在出现以下问题: 我正在列表中添加两个日期之间的所有天数。在那之后,我试图阻止一些特定的日子总是相同的日子:周一,周六和周日。这些日子不应该再出现在名单上了 我尝试过在遍历列表时从列表中删除值。但它没有按我预期的方式工作 例如: 我选择2019年9月17日作为开始,选择2019年9月24日作为结束。预期产出应为: 工作日:星期二 日期:2019-09-18 工作日:星期三 日期:2019-09-19 工作日:星期四 日期:2019-09-20 工作日:星期五 日期:2019-09-24 工作日:星期二 但如果我运行代码,输出是: 工作日:星期二 日期:2019-09-18 工作日:星期三 日期:2019-09-19 工作日:星期四 日期:2019-09-20 工作日:星期五 日期:2019-09-21 工作日:星期五 日期:2019-09-22 工作日:星期五 日期:2019-09-23 工作日:星期五 日期:2019-09-24 工作日:星期二 你可以看到。“星期六、星期日和星期一”这个词将被删除,但仍在列表中 代码: 我最终期望的是,每个星期一、星期六和星期天都应该从列表中删除,并且输出应该是正确的,如我的示例所示JavaFX:删除特殊的一天,同时对其进行分级,java,date,javafx,Java,Date,Javafx,我知道,有很多例子说明如何在遍历列表时从列表中删除某些内容,但这不是重点 我正在尝试自动化一个过程,我需要记录我的工作,最终它应该打印成一个文件,比如2019年1月1日-周二。为此,我有一个带有两个日期选择器的UI。在选择两个不同的日期并进行比较之后,我知道这些日期之间有多少天 现在出现以下问题: 我正在列表中添加两个日期之间的所有天数。在那之后,我试图阻止一些特定的日子总是相同的日子:周一,周六和周日。这些日子不应该再出现在名单上了 我尝试过在遍历列表时从列表中删除值。但它没有按我预期的方式工
谢谢您的System.out.println命令在for循环中,但在else块之外。这就是显示所有日期的原因
只要将这两行移到else块中,就可以得到所需的输出。我很高兴您解决了问题。我想补充三点 如果你愿意,你可以用小溪。 您不应该同时在迭代器和列表上调用remove。 我对您代码中出现错误的原因的解释。 一,。您可以使用流。在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);
});
二,。不要调用dateList.remove。您对iterator.remove的调用已经从列表中删除了日期。因此,您对dateList.remove的调用不起任何作用。这是运气。如果找到要删除的元素,迭代器将在随后调用hasNext时抛出ConcurrentModificationException。除非通过迭代器,否则在对集合进行迭代时不允许修改集合,并且尝试修改集合的结果是未定义的。因此,从代码中删除该调用
三,。你的代码出了什么问题?你的输出看起来很有趣。对于阻止的日期,星期五与日期一起打印,即星期几与日期不匹配。发生的情况是:您正确地将日期设置为列表中的日期。由于这一天是被阻止的一天,您执行了if语句的if部分,从列表中删除了日期。您没有执行else部分,因此day与上一次迭代(星期五)相比没有变化。在您无条件打印的if声明日期之后,依次为冻结日期2019-09-21、2019-09-22和2019-09-23,每次为星期五。谢谢。但是你能解释为什么星期一、星期六和星期天被标记为星期五吗?星期一、星期六和星期天的日期在if块中被删除。您只在else部分更改day参数,因此它们保留上一个循环Friday的值注意,开关可以使代码更易于阅读:switchdate.getDayOfWeek{case SATURDAY:case SUNDAY:case MONDAY:/*if body*/break;default:/*else body*/}此外,您可以使用==来比较枚举常量。也考虑使用RelvIF…
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