highcharts绘制统计图的应用(二)

2014-11-24 08:27:12 · 作者: · 浏览: 1
resultMap;
}
private Map getData(){
// 用来存储返回结果的Map
Map resultMap = new HashMap();
List analyticses = Text.getList();
// 把analyticses按照频道id分组
Map map = new HashMap();
for (int i = 0; i < analyticses.size(); i++) {
Analytics analytics = (Analytics) analyticses.get(i);
String channleName = analytics.getChannelName();
if (map.containsKey(channleName)) {
map.get(channleName).add(analytics);
} else {
List groupList = newArrayList();
groupList.add(analytics);
map.put(channleName, groupList);
}// end if-else
}// end for
// 存放曲线的所需的数据
List list = new ArrayList();
// 把每一个组的list里面的Analytics对象的duration放入data
for (Iterator iterator = map.keySet().iterator(); iterator
.hasNext();) {// 遍历每一个key
String channelName = iterator.next();//频道名称
ChartEntity ent = new ChartEntity();
ent.setName(channelName);
long[] array = newlong[map.get(channelName).size()];//画图所需的数据,对应着series的data
int i = 0;
for (Iterator iterator2 = map.get(channelName)
.iterator(); iterator2.hasNext();) {// 遍历每一个key对应的值也就是List
Analytics ana = iterator2.next();
array[i] = ana.getDuration();
i++;
}//end for
ent.setData(array);
list.add(ent);
}//end for
List channels = this.channelServcie.listChannel();
// 横坐标所需的数据
List channelNames = new ArrayList();
for (Channel channel : channels) {
String name = channel.getName();
channelNames.add(name);
}// end for
resultMap.put("categories", channelNames);// 横坐标的名字,应该改为时间最好,后续要完善
resultMap.put("data", list);// 数据
return resultMap;
}
注意:
1) 类ChartEntity里面保存了两条字段 private String name,private Long data[],并提供了两个get/set方法,
name对应着Highcharts.Chart里series的name和data
2) Text.getList()是提供的一些测试数据,也可以从相关的 数据库中获取代码如下
[java]
public static List getList(){
List analyticses = new ArrayList();
//第一组数据,对应统计图的一条线
for(int i=0;i<9;i++){
Analytics a= new Analytics();
a.setChannelName("A");
a.setDuration(100+i*10);
analyticses.add(a);
}
//第二组数据,对应统计图的一条线
for(int i=0;i<8;i++){
Analytics a= new Analytics();
a.setChannelName("B");
a.setDuration(60+i*10);
analyticses.add(a);
}
//第三组数据,对应统计图的一条线
for(int i=0;i<15;i++){
Analytics a= new Analytics();
a.setChannelName("C");
a.setDuration(200+i*10);
analyticses.add(a);
}
return analyticses;