给定两个日期(M,YYYY形式的开始日期和结束日期),我想制作一个arraylist,每个元素的日期形式为起始日期和结束日期之间的M,YYYY,包括。 / p>
例如,给定日期10,2010和2,2011,我的列表应如下所示:
list = {(10,2010),(11,2010),(12,2010),(1,2011),(2,2011)};
我可以通过创建一个while循环(同时startYear< endYear),开始月份的帐户,循环到第12个月,将日期插入列表等来完成此操作。
但是我觉得必须有更有效的方法来解决这个问题,因为这需要对起始月份和结束年份进行多次检查。有没有更好的解决方案,我没有看到?
答案 0 :(得分:5)
将日期存储为对象而不是年,月的“对”会更有意义。例如,使用YearMonth
API(Java 8及更高版本)中的java.time类:
YearMonth from = YearMonth.of(2010, 10);
YearMonth to = YearMonth.of(2011, 2);
List<YearMonth> list = new ArrayList<> ();
for (YearMonth ym = from; !ym.isAfter(to); ym = ym.plusMonths(1)) {
list.add(ym);
}
或者使用stream API(在这种情况下不确定它更干净):
List<YearMonth> list = Stream.iterate(from, ym -> ym.plusMonths(1))
.limit(MONTHS.between(from, to) + 1)
.collect(toList());