我以前从未使用过Joda-Time,但是我有ArrayList,其中包含具有LocalDate和count的对象。因此,我每天在ArrayList中计数,每天在ArrayList中仅计数一次。
我需要计算列表中每年每个月的计数。
我的资料:
例如。:
dd.MM.yyyy
17.01.1996 (count 2)
18.01.1996 (count 3)
19.02.1996 (count 4)
19.03.1996 (count 1)
18.05.1997 (count 3)
现在,我要像这样的高潮:
MM.yyyy
01.1996 -> 2 (17.1.1996) + 3 (18.1.1996) = 5
02.1996 -> 4 (19.2.1996) = 4
03.1996 -> 1 (19.3.1996) = 1
05.1997 -> 3 (18.5.1997) = 3
我只需要每月计算一次,但我不知道什么是实现此目标的最佳方法。
资料类别:
private class Info{
int count;
LocalDate day;
}
结果,我将把某个类放在包含Month和Year date + count的类中。
最佳答案
在Joda-Time中,有一个表示Year + Month信息的类,名为YearMonth
。
您需要做的主要是通过遍历包含Map<YearMonth, int>
和计数的原始YearMonth
来构造一个List
来存储每个LocalDate
的计数,并相应地更新地图。
从LocalDate
到YearMonth
的转换应该很简单:YearMonth yearMonth = new YearMonth(someLocalDate);
应该可以
在伪代码中,它看起来像:
List<Info> dateCounts = ...;
Map<YearMonth, Integer> monthCounts = new TreeMap<>();
for (Info info : dateCounts) {
YearMonth yearMonth = new YearMonth(info.getLocalDate());
if (monthCounts does not contains yearMonth) {
monthCounts.put(yearMonth, info.count);
} else {
oldCount = monthCounts.get(yearMonth);
monthCounts.put(yearMonth, info.count + oldCount);
}
}
// feel free to output content of monthCounts now.
// And, with TreeMap, the content of monthCounts are sorted
关于java - Java Joda-Time,将LocalDate分配给月和年,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23819037/