List<JavaBean>处理成Map<String ,List<String>> 为前端柱状图提供成品数据源

先上干货 

首先我这里有个前提,就是给到画面的所有数据都处理成String。所以我最终返回的数据类型是Map<String ,List<String>> 。

原理就是通过T这个东西(我也不知道学名叫啥),把参数类型写活,以便达到通用效果。

package org.lichepnark.stock.util;

import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class EchartUtils {

    public static <T> Map<String, List<String>> convertListBeanToMapList(List<T> sourceList, Class<T> tClass) throws IntrospectionException, InvocationTargetException, IllegalAccessException {
        Map<String,List<String>> resultMap = new HashMap<>();
        // 先找出所有属性
        List<String> mapKey = new ArrayList<>();
        for (Field field: tClass.getDeclaredFields()){
            mapKey.add(field.getName());
        }
        
        //每一个属性的值都收集到list,然后以属性名称作为key,put到map中。
        List<String> valueList;
        for(String key : mapKey){
            valueList= new ArrayList<>();
            for(T item:sourceList){
                Object obj = new PropertyDescriptor(key, tClass).getReadMethod().invoke(item);
                valueList.add(obj.toString());
            }
            resultMap.put(key,valueList);
        }
        return resultMap;
    }
}

处理效果

处理前:

处理后:

 

背景

最近在炒股,偶然间想出了一个数据模型想要验证一下。所以找了一个股票相关的数据接口,撸了一些数据做了一下验证。

但是只看控制台的话,太不友好了。所以想用图形展示一下数据。于是就找到了Echart的教程。

但是就在后端往ajax怼数据的时候,发现非常不友好。

我的模型加工好的数据是List<ResultDto>

@Data
public class ResultDto {
    @JsonProperty("time")
    private String time;
    @JsonProperty("data")
    private String data;
}

但是我的Echart图形想要的数据源是x轴数据集合跟y轴数据集合。

// 异步加载数据
    $.get('pmBeginning/report').done(function (data) {
        // 填入数据
        myChart.setOption({
            title:{
                text: "午后开盘十五分钟的差价"
            },
            xAxis: {
                // x轴
                data: data.time
            },
            series: [{
                // 根据名字对应到相应的系列
                // y轴
                name: '收盘价-开盘价',
                data: data.data
            }]
        });
    });

因为不想每次都费劲的去写代码。所以就写了一个通用方法。传入不同类型的bean,都可以转换。一举多得。

展示一下我的模型。能猜出是哪只股票么?哈哈

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

脳墓

感谢各位大佬打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值