上面是今天碰到需求,之前就做過類似的分組統(tǒng)計(jì),這個(gè)相對(duì)來說比較簡(jiǎn)單,統(tǒng)計(jì)的也少,序號(hào)和總預(yù)約人數(shù)這兩部分交給前端了,不需要由后端統(tǒng)計(jì),后端統(tǒng)計(jì)一下預(yù)約日期和檢查項(xiàng)目和預(yù)約人數(shù)就行;文章來源地址http://www.zghlxwxcb.cn/news/detail-648187.html
@Override
public List<ItemStatisticsVo> statistics(ItemStatisticsModel itemStatisticsModel) {
//調(diào)用xml接口
List<ItemStatisticsVo> list = new ArrayList<>();
//這里的方法是mapper.xml映射的sql,根據(jù)傳入的參數(shù)進(jìn)行查詢,這邊調(diào)用一下
List<ItemVO> itemVOS = this.getBaseMapper().selectScrReserve(itemStatisticsModel);
if (itemVOS.isEmpty()) {
throw new ServiceException("查詢?yōu)榭?);
}
itemVOS.forEach(t -> t.setCreateTime(DateUtil.parseDate(DateUtil.format(t.getCreateTime(), "yyyy-MM-dd"))));
//先以創(chuàng)建時(shí)間分組,每個(gè)時(shí)間對(duì)應(yīng)一個(gè)list
Map<Date, List<ItemVO>> collect = itemVOS.stream().collect(Collectors.groupingBy(ItemVO::getCreateTime));
//k->時(shí)間 v->每個(gè)時(shí)間對(duì)應(yīng)的list
collect.forEach((k, v) -> {
//每個(gè)list中包含檢查項(xiàng)目名稱,以項(xiàng)目名稱分組
Map<String, List<ItemVO>> collect1 = v.stream().collect(Collectors.groupingBy(ItemVO::getItemName));
ItemStatisticsVo vo = new ItemStatisticsVo();
//到這兒直接set日期
vo.setReservationDate(k);
List<ItemStatisticsInfoVo> list1 = new ArrayList<>();
//x->項(xiàng)目名稱 y->list<ItemVo>
collect1.forEach((x, y) -> {
ItemStatisticsInfoVo infoVo = new ItemStatisticsInfoVo();
//檢查項(xiàng)目名稱
infoVo.setInspectionName(x);
//統(tǒng)計(jì)list的大小,就是每個(gè)項(xiàng)目名稱預(yù)約的人數(shù)
infoVo.setScNum(y.size());
list1.add(infoVo);
});
vo.setList(list1);
list.add(vo);
});
return list;
}
文章來源:http://www.zghlxwxcb.cn/news/detail-648187.html
到了這里,關(guān)于如何在Stream流中分組統(tǒng)計(jì)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!