有个paymentTime,为String类型,为yyyy-MM-dd HH:mm:ss格式,记录了时间信息,在List<Orders> ordersList=ordersService.list()得到总list之后,怎么按照今年的时间划分成12个月的order_price,并用CollUtil.newArrayList将其输出代码简单一点
时间: 2024-03-26 09:36:24 浏览: 63
Spring Boot 将yyyy-MM-dd格式的文本字符串直接转换为LocalDateTime出现的问题
5星 · 资源好评率100%
可以按照以下步骤来实现:
1. 定义一个Map来保存每个月份的订单金额,月份作为key,金额作为value。
2. 遍历订单列表ordersList,将每个订单的订单金额累加到对应月份的value中。
3. 最后将Map中的数据按照月份排序,并将月份和订单金额封装成一个Map,添加到List中。
4. 使用CollUtil.newArrayList方法将List输出。
下面是代码示例:
```java
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import com.google.common.collect.Maps;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
public class OrderUtils {
public static List<Map<String, Object>> groupByMonth(List<Orders> ordersList) {
Map<Integer, BigDecimal> monthMap = Maps.newHashMap();
for (Orders orders : ordersList) {
Date paymentTime = DateUtil.parse(orders.getPaymentTime(), "yyyy-MM-dd HH:mm:ss");
int month = DateUtil.month(paymentTime) + 1;
BigDecimal orderPrice = new BigDecimal(orders.getOrderPrice());
if (monthMap.containsKey(month)) {
monthMap.put(month, monthMap.get(month).add(orderPrice));
} else {
monthMap.put(month, orderPrice);
}
}
List<Map<String, Object>> result = CollUtil.newArrayList();
for (int i = 1; i <= 12; i++) {
Map<String, Object> map = Maps.newHashMap();
map.put("month", i);
map.put("orderPrice", monthMap.containsKey(i) ? monthMap.get(i) : BigDecimal.ZERO);
result.add(map);
}
return result;
}
}
```
在上面的代码中,groupByMonth方法接收一个订单列表ordersList作为参数,返回一个List<Map<String, Object>>,其中每个Map保存了月份和订单金额。我们使用了Hutool和Guava库提供的工具类来简化代码,例如Hutool的DateUtil和CollUtil,Guava的Maps。
阅读全文