入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

java实现分组

创建时间:2016-06-23 投稿人: 浏览次数:407
public class GroupBy {
	
	public static void main(String[] args) {
		
		List<Map<String,Object>> data= new ArrayList<Map<String,Object>>();
		Map<String,Object> map = new HashMap<String,Object>();
		map.put("hostDepartmentName", "综合部");
		map.put("contractCode", "KG12-9201-2014-000133");
		map.put("approvalPassTime", "2014-12-04 11:10:13");
		map.put("signTime", "2015-04-07");
		map.put("signConfirmDate", "2015-04-17");
		map.put("contractAmount", "694590.020000");
		map.put("sumbers", "1");
		map.put("contractStatus", "300");
		map.put("sendApprovalDate", "2014-12-01");
		map.put("isProjectPrice", "700");
		map.put("requirementDeptName", "综合部");
		map.put("projectName", "否");
		data.add(map);
		 map = new HashMap<String,Object>();
		 map.put("hostDepartmentName", "综合部");
		 map.put("contractCode", "KG12-9201-2014-000201");
		 map.put("approvalPassTime", "2014-12-24 17:48:32");
		 map.put("signTime", "2015-03-30");
		 map.put("signConfirmDate", "2015-04-01");
		 map.put("contractAmount", "90000.000000");
		 map.put("sumbers", "1");
		 map.put("contractStatus", "300");
		 map.put("sendApprovalDate", "2014-12-18");
		 map.put("isProjectPrice", "700");
		 map.put("requirementDeptName", "终端与测试实验室");
		 map.put("projectName", "否");
		data.add(map);
		 map = new HashMap<String,Object>();
		 map.put("hostDepartmentName", "综合部");
		 map.put("contractCode", "KG12-9201-2014-000203");
		 map.put("approvalPassTime", "2014-12-25 15:49:27");
		 map.put("signTime", "2015-02-26");
		 map.put("signConfirmDate", "2015-03-04");
		 map.put("contractAmount", "44290.000000");
		 map.put("sumbers", "1");
		 map.put("contractStatus", "300");
		 map.put("sendApprovalDate", "2014-12-22");
		 map.put("isProjectPrice", "700");
		 map.put("requirementDeptName", "综合部");
		 map.put("projectName", "否");
		data.add(map);
		 map = new HashMap<String,Object>();
		 map.put("hostDepartmentName", "业务拓展中心");
		 map.put("contractCode", "KG12-9201-2014-000185");
		 map.put("approvalPassTime", "2014-12-22 11:52:20");
		 map.put("signTime", "2015-01-05");
		 map.put("signConfirmDate", "2015-01-16");
		 map.put("contractAmount", "0.000000");
		 map.put("sumbers", "1");
		 map.put("contractStatus", "300");
		 map.put("sendApprovalDate", "2014-12-09");
		 map.put("isProjectPrice", "700");
		 map.put("requirementDeptName", "-");
		 map.put("projectName", "否");
		data.add(map);
		@SuppressWarnings("unused")
		List<Map<String,Object>> result = group(data,new String[]{"hostDepartmentName","requirementDeptName"},new String[]{"contractAmount","sumbers"});
		
	}

	/**
	 * 分组函数
	 * 
	 * @param groupFields
	 * 			分组字段
	 * @param sumFields 
	 * 			合计字段
	 * @return
	 */
	public static List<Map<String,Object>>  group(List<Map<String,Object>> datas,String[] groupFields,String[] sumFields){
		Map<String,Object> temp = new HashMap<String,Object>();
		for (Map<String,Object> data : datas) {
			String groupFieldKey =  "";
			for (String groupField : groupFields) {
				groupFieldKey+=groupField+"_"+data.get(groupField)+"|";
			}
			//算分组合计
			groupSum(sumFields, temp, data, groupFieldKey);
			
		}
		//转换结果
		List<Map<String, Object>> results = covertResult(temp);
		return results;
	}

	/**
	 * 将temp中的key value 转换为List<Map<String,Object>>对像
	 * @param temp
	 * @return
	 */
	private static List<Map<String, Object>> covertResult(Map<String, Object> temp) {
		Map<String,Object> values = new HashMap<String,Object>();
		for (String key : temp.keySet()) {
			if(!values.containsKey(key.substring(0, key.lastIndexOf("|")))){
				values.put(key.substring(0, key.lastIndexOf("|")), key+"_"+temp.get(key));
				continue;
			}
			for (String rk : values.keySet()) {
				if(key.startsWith(rk)){
					values.put(rk, values.get(rk)+key.substring(key.lastIndexOf("|"))+"_"+temp.get(key));
					break;
				}
			}
		}
		List<Map<String,Object>> results = new ArrayList<Map<String,Object>>();
		Map<String,Object> result;
		for (Object key : values.values()) {
			result = new HashMap<String,Object>();
			String ss[] =  key.toString().split("\|");
			for (String t : ss) {
				String[] ts = t.split("_");
				result.put(ts[0], ts[1]);
			}
			results.add(result);
		}
		return results;
	}

	/**
	 * 计算合计
	 * @param sumFields
	 * @param temp
	 * @param data
	 * @param groupFieldKey
	 */
	private static void groupSum(String[] sumFields, Map<String, Object> temp,
			Map<String, Object> data, String groupFieldKey) {
		for (String sumField : sumFields) {
			String groupFieldKey_sumField =  groupFieldKey+sumField;
			if(temp.containsKey(groupFieldKey_sumField)){
				temp.put(groupFieldKey_sumField, Double.parseDouble(data.get(sumField).toString())+Double.parseDouble(temp.get(groupFieldKey_sumField).toString()));
			}else{
				temp.put(groupFieldKey_sumField, Double.parseDouble(data.get(sumField).toString()));
			}
		}
	}
}

阅读更多
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
  • 上一篇:没有了
  • 下一篇:没有了
未上传头像