开发中遇到的场景描述
使用 Echars 做订单金额统计, 横纵坐标分别要用到两组数据. 采用OrderStatisticsVo 返回, 但是要查询的表, 查完后需要对数据进行处理,分别是两个集合
OrderStatisticsVo
@Data
@Schema ( description = "统计结果实体类" )
public class OrderStatisticsVo {
@Schema ( description = "日期数据集合" )
private List < String > dateList ;
@Schema ( description = "总金额数据集合" )
private List < BigDecimal > amountList ;
}
@Data
public class OrderStatistics extends BaseEntity {
private Date orderDate;
private BigDecimal totalAmount;
private Integer totalNum;
}
<?xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
< mapper namespace = " com.chen.manager.mapper.OrderStatisticsMapper" >
< select id = " getOrderStatisticsData" resultType = " com.chen.model.entity.order.OrderStatistics" >
select * from order_statistics
< where>
is_deleted=0
< if test = " createTimeBegin!=null and createTimeBegin!=''" >
and create_time >=#{createTimeBegin}
</ if>
< if test = " createTimeEnd!=null and createTimeEnd!=''" >
and create_time < =#{createTimeEnd}
</ if>
</ where>
</ select>
</ mapper>
services 层的代码,调用mapper去查询 OrderStatistics 实体类 然后对数据进行封装. 传统的写法
@Service
public class OrderInfoServiceImpl implements OrderInfoService {
@Autowired
private OrderStatisticsMapper orderStatisticsMapper;
@Override
public OrderStatisticsVo getOrderStatisticsData ( OrderStatisticsDto orderStatisticsDto) {
OrderStatisticsVo orderStatisticsVo = new OrderStatisticsVo ( ) ;
List < OrderStatistics > orderStatisticsList= orderStatisticsMapper. getOrderStatisticsData ( orderStatisticsDto) ;
if ( CollectionUtil . isEmpty ( orderStatisticsList) ) {
throw new MyException ( 229 , "所选时间没有数据" ) ;
}
ArrayList < String > dataList = new ArrayList < > ( ) ;
ArrayList < BigDecimal > amountList = new ArrayList < > ( ) ;
for ( OrderStatistics orderStatistics : orderStatisticsList) {
dataList. add ( DateUtil . format ( orderStatistics. getOrderDate ( ) , "yyyy-MM-dd" ) ) ;
amountList. add ( orderStatistics. getTotalAmount ( ) ) ;
}
orderStatisticsVo. setAmountList ( amountList) ;
orderStatisticsVo. setDateList ( dataList) ;
return orderStatisticsVo;
}
}
用stream流中的方法 map 进行处理
演变过程 (看了好理解)
@Service
public class OrderInfoServiceImpl implements OrderInfoService {
@Autowired
private OrderStatisticsMapper orderStatisticsMapper;
@Override
public OrderStatisticsVo getOrderStatisticsData ( OrderStatisticsDto orderStatisticsDto) {
OrderStatisticsVo orderStatisticsVo = new OrderStatisticsVo ( ) ;
List < OrderStatistics > orderStatisticsList= orderStatisticsMapper. getOrderStatisticsData ( orderStatisticsDto) ;
if ( CollectionUtil . isEmpty ( orderStatisticsList) ) {
throw new MyException ( 229 , "所选时间没有数据" ) ;
}
orderStatisticsVo. setDateList ( orderStatisticsList. stream ( ) . map ( orderStatistics ->
DateUtil . format ( orderStatistics. getOrderDate ( ) , "yyyy-MM-dd" ) ) . collect ( Collectors . toList ( ) ) ) ;
orderStatisticsVo. setAmountList ( orderStatisticsList. stream ( ) . map ( orderStatistics -> orderStatistics. getTotalAmount ( ) ) . collect ( Collectors . toList ( ) ) ) ;
return orderStatisticsVo;
}
}
最简写法
@Service
public class OrderInfoServiceImpl implements OrderInfoService {
@Autowired
private OrderStatisticsMapper orderStatisticsMapper;
@Override
public OrderStatisticsVo getOrderStatisticsData ( OrderStatisticsDto orderStatisticsDto) {
OrderStatisticsVo orderStatisticsVo = new OrderStatisticsVo ( ) ;
List < OrderStatistics > orderStatisticsList= orderStatisticsMapper. getOrderStatisticsData ( orderStatisticsDto) ;
if ( CollectionUtil . isEmpty ( orderStatisticsList) ) {
throw new MyException ( 229 , "所选时间没有数据" ) ;
}
orderStatisticsVo. setDateList ( orderStatisticsList. stream ( ) . map ( orderStatistics ->
DateUtil . format ( orderStatistics. getOrderDate ( ) , "yyyy-MM-dd" ) ) . collect ( Collectors . toList ( ) ) ) ;
orderStatisticsVo. setAmountList ( orderStatisticsList. stream ( ) . map ( orderStatistics -> orderStatistics. getTotalAmount ( ) ) . collect ( Collectors . toList ( ) ) ) ;
return orderStatisticsVo;
}
}