问题:
我有很多日期,我需要按周安排.
问题: 如何按日期的一周对日期进行分组?
示例数据集
Date date = new SimpleDateFormat.parse("04/01/2015")
Date date = new SimpleDateFormat.parse("04/02/2015")
Date date = new SimpleDateFormat.parse("04/03/2015")
Date date = new SimpleDateFormat.parse("04/04/2015")
Date date = new SimpleDateFormat.parse("04/05/2015")
Date date = new SimpleDateFormat.parse("04/06/2015")
Date date = new SimpleDateFormat.parse("04/07/2015")
Date date = new SimpleDateFormat.parse("04/08/2015")
Date date = new SimpleDateFormat.parse("04/09/2015")
Run Code Online (Sandbox Code Playgroud)
期望的输出
HashMap<Date, Date> hashMap = groupByWeek(ArrayList<Date> dates);
printWeeklyGroupedDates();
Week 1:
04/01/2015
04/02/2015
04/03/2015
04/04/2015
04/05/2015
04/06/2015
04/07/2015
Week 2:
04/08/2015
04/09/2015
Run Code Online (Sandbox Code Playgroud)
我试过的
public Date getWhichYearlyWeek(Date date){
Calendar cal …Run Code Online (Sandbox Code Playgroud) 假设我有一份月度商店销售清单,以便:
ID, date, amount
1, Jan 2016, $500
2, Feb 2017, $200
3, October 2017, $300
Run Code Online (Sandbox Code Playgroud)
我的财政年度是2016年9月1日到2017年8月31日.换句话说,前两个条目是在一个会计年度,另一个是在第二个会计年度.实际会计年度是特定于用户的.
我想storeSales为每个会计年度创建一个列表.
到目前为止,我有:
Map<fiscalYearID, List<StoreSale> = storeSales.stream()
.collect(
Collectors.groupingBy(
storeSale -> storeSale.getSaleLocalDate()));
Run Code Online (Sandbox Code Playgroud)
问题是上面的代码只会按确切日期分组.我可以添加,.getYear()但只能按年份而不是财政年度.我还考虑过使用Stream.iterate()每个会计年度日期范围,然后浏览该日期范围内所有商店的商店销售列表到列表中,但这会非常难看,大O值开始迅速攀升.这将是这样的:
Stream.iterate(startDate, date -> date.plusMonths(1))
.limit(ChronoUnit.MONTHS.between(startDate, endDate.plusMonths(1)))
.forEach(
{
addToFiscalYear(fiscalYearID,
storeSales.stream().
.filter(storeSale -> storeSale.getSaleLocalDate().equals(date))
.collect(Collectors.toList());
});
Run Code Online (Sandbox Code Playgroud)
或类似的东西.我没有太多探索它,因为它的大O快速增加,我希望有更好的解决方案......