先上干货
首先我这里有个前提,就是给到画面的所有数据都处理成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,都可以转换。一举多得。
展示一下我的模型。能猜出是哪只股票么?哈哈