java 그룹 구성

5703 단어
public class GroupBy {
	
	public static void main(String[] args) {
		
		List> data= new ArrayList>();
		Map map = new HashMap();
		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();
		 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();
		 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();
		 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> result = group(data,new String[]{"hostDepartmentName","requirementDeptName"},new String[]{"contractAmount","sumbers"});
		
	}

	/**
	 *  
	 * 
	 * @param groupFields
	 * 			 
	 * @param sumFields 
	 * 			 
	 * @return
	 */
	public static List>  group(List> datas,String[] groupFields,String[] sumFields){
		Map temp = new HashMap();
		for (Map data : datas) {
			String groupFieldKey =  "";
			for (String groupField : groupFields) {
				groupFieldKey+=groupField+"_"+data.get(groupField)+"|";
			}
			// 
			groupSum(sumFields, temp, data, groupFieldKey);
			
		}
		// 
		List> results = covertResult(temp);
		return results;
	}

	/**
	 *  temp key value  List> 
	 * @param temp
	 * @return
	 */
	private static List> covertResult(Map temp) {
		Map values = new HashMap();
		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> results = new ArrayList>();
		Map result;
		for (Object key : values.values()) {
			result = new HashMap();
			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 temp,
			Map 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()));
			}
		}
	}
}

좋은 웹페이지 즐겨찾기