java 对象集合补全缺失的月份(折线统计图计算12个月的数据分布)

该博客介绍了如何处理前端显示数据的格式,并通过后台计算补充缺失的月份,值默认为0。提供了`DataTrans`类来存储数据,利用`SupplementDateUtil`工具类进行月份补全,以及`RemovalData`工具类进行数据去重与值合并。示例代码展示了处理流程,最后按月份升序排序并打印结果。
摘要由CSDN通过智能技术生成

1、前端显示数据的格式
十个月的数据
2.后台通过查询计算得到的数据
在这里插入图片描述
3.补全缺失的月份,值赋0就可以

4.代码
实体:

/**
 * @author  Mr. Dong
 * @create  2021/11/23 13:22
 * @desc    list 对象属性相同的合并
 **/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DataTrans{
    private String name;

    private double value;
}

工具类:

/**
 * @author  Mr. Dong
 * @create  2021/11/24 11:18
 * @desc    补全月份并赋值为0
 **/
public class SupplementDateUtil {

    public static final String[] monthAndDay = new String[]{"01","02","03","04","05","06","07","08","09","10","11","12"};

    public static List<DataTrans> supplementDate(List<DataTrans> params){

        List<DataTrans> list = new ArrayList<>();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        //当前年份
        int year = calendar.get(Calendar.YEAR);
        for (DataTrans data:params){
            list.add(data);
            for (String s:monthAndDay){
                DataTrans dataTrans = new DataTrans();
                String date = year+"-"+s;
                if (!date.equals(data.getName())){
                    dataTrans.setName(date);
                    dataTrans.setValue(0);
                    list.add(dataTrans);
                }
            }
        }
        // 集合中相同属性去重、值合并
        return RemovalData.merge(list);
    }



    public static void main(String[] args) {

        DataTrans dataTrans = new DataTrans("2021-08",0.05);
        DataTrans dataTrans1 = new DataTrans("2021-05",0.8);
        DataTrans dataTrans2 = new DataTrans("2021-05",0.8);
        DataTrans dataTrans3 = new DataTrans("2021-11",0.86);
        List<DataTrans> list = new ArrayList<>();
        list.add(dataTrans);
        list.add(dataTrans1);
        list.add(dataTrans2);
        list.add(dataTrans3);
        List<DataTrans> list1 = supplementDate(list);
        //根据月份升序排序
        Collections.sort(list1, Comparator.comparing(DataTrans::getName,(t1, t2) -> t1.compareTo(t2)));
        System.out.println(list1);
    }
}

去重合并属性值工具类

mport com.cust.bigdatacollection.entity.DataTrans;

import java.util.List;
import java.util.stream.Collectors;
/**
 * @author  Mr. Dong
 * @create  2021/11/23 11:21
 * @desc    list中相同的对象属性合并
 **/
public class RemovalData {

    public static List<DataTrans> merge(List<DataTrans> list) {
        List<DataTrans> result = list.stream()
                // 表示name为key,接着如果有重复的,那么从DataTrans对象o1与o2中筛选出一个,这里选择o1,
                // 并把name重复,需要将value与o1进行合并的o2, 赋值给o1,最后返回o1
                .collect(Collectors.toMap(DataTrans::getName, a -> a, (o1, o2)-> {
                    o1.setValue(o1.getValue() + o2.getValue());
                    return o1;
                })).values().stream().collect(Collectors.toList());
        return result;
    }
}

5.结果
在这里插入图片描述

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值