用java方法对数据进行根据字段分组并封装二维数组

碰到图表中需要 

[{name="name1",data=[[月份,数量],[月份,数量]},{name="name2",data=[[月份,数量]]}]

格式的数据。

如是在mybatis框架中可以新建对象,使用<collection></collection>

封装对象。

而hibernate不知能不能有sql直接处理成二维数组的方法,但问题总是要快速解决的,于是乎写了个公共方法,以便使用

    //后台查询出[[1,2,"name1"],[2,3,"name2"],[3,4,"name1"]],
    //使用这个方法处理成[{name="name1",data=[[1,2],[3,4]]},{name="name2",data=[[2,3]]}]
    //便于图表展示根据name选择查看条目
	public static List<HashMap<String,Object>> makeData(List<Object[]> list)
    {
    	String groupname = "";
    	HashMap<String,Object> map = new HashMap<String,Object>();
    	Object arr[] = new Object[2];
    	List<Object[]> l = new ArrayList<Object[]>();
    	List<HashMap<String,Object>> result = new ArrayList<HashMap<String,Object>>();
    	result=addMonth(result);
    	for(Object[] o : list){
    		//新建组并在此组添加数据
    		if(groupname == "")
    		{
    			groupname = o[2].toString();
    			map.put("name", groupname);
    			arr[0]= (Integer)o[0];
    	        arr[1] =(BigInteger)o[1];
    	        l.add(arr);
    		}
    		//将上一组数据加入result中并新建组在此组添加数据
    		else if (!groupname.equals(o[2].toString())) {
    			//将之前数据加入result中
    			//l.add(arr);
    			map.put("data", l);
    			map.put("type","scatter");
    			result.add(map);
    			//初始化组==新建组
    			l = new ArrayList<Object[]>();map= new HashMap<String,Object>();arr = new Object[2];
    			groupname = o[2].toString();
    			map.put("name", groupname);
    			//添加此数据
    			arr[0]= (Integer)o[0];
    	        arr[1] =(BigInteger)o[1];
    	        l.add(arr);
    	      //如为最后一条数据直接加入result中.0
    	        if(o.equals(list.get(list.size()-1))){
    	        	map.put("data", l);
    	        	map.put("type","scatter");
        			result.add(map);
    	        }
    		}
    		//往旧组里加数据
    		else if (groupname.equals(o[2].toString())){
    			arr = new Object[2];
    			arr[0]= (Integer)o[0];
    	        arr[1] =(BigInteger)o[1];
    	        l.add(arr);
    	        //如为最后一条数据直接加入result中
    	        if(o.equals(list.get(list.size()-1))){
    	        	map.put("data", l);
    	        	map.put("type","scatter");
        			result.add(map);
    	        }
    		}
    	}
    	return result;
    }



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值