java实现分组
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。
- 上一篇:没有了
- 下一篇:没有了