场景:
有多条记录 需要 根据 字段1 字段2 ... 分组
将记录中是[color=red]数值类型[/color]的字段 汇总
[color=red]非数值类型并且不是分组字段[/color] 将其设为 null
公司 行业 资产 增长率
a edu 10 .5%
b it 20 .3%
c gov 15 .2%
d it 12 .3%
如果根据 行业 分组 然后汇总 得出
公司 行业 资产 增长率
null edu 10 .5%
null it 32 .6%
null gov 15 .2%
需要是一个 通用的算法 期望的api 是 这样的
Set group(Set , Array)
1. 参数1 : 需要分组汇总的集合
2. 参数2 : 需要分组的字段数组
3. 返回值 : 分组汇总的集合
谢谢
[code="java"]
public Set> getResult2(Set> set,Set array){
/* 结构Set的散列结构 /
Map> distMap = new HashMap>();
/ 获取不关注的field /
Set discardFields;
/ 汇总数据的field */
Set caculateFields;
/* 调用prepare2进行汇总,针对Map结构的情况 */
Set result = new HashSet();
result.addAll(distMap.values());
return result;
}
/*准备工作*/
public void prepare2(Map<String,Map<String,Object>> distMap,
Map <String,Object> addMap,
Set<String> discardFields,
Set<String> caculateFields){
/*调用setNul处理被汇总的Map*/
/* 判断addMap的groupby 是否已经存在
* <1> 不存在,就把addMap放进去
*
* <1> 已经存在了,对存在的Map进行加运算
*/
}
/* 设置不关注的field为null */
void setNul(Map <String,Object> addMap,Set<String> discardFields){
}
/*获取不关注的field,被关注的field无非是数字类型和groupby的字段*/
Set<String> discardField(Set fields,Set<String> groupbySet){
return null;
}
String groupByValue2(Map<String,Object> set,Set<String> array){
StringBuilder str = new StringBuilder();
Iterator<String> it = array.iterator();
while(it.hasNext()){
str.append(set.get(it.next()));
}
return str.toString();
}
public Set provideSet(){
Set set = new HashSet();
for(int i=0;i Person p = new Person();
p.setAge(i+1);
p.setSalary(new Long(1000+i*100));
p.setName("name"+(i+1));
p.setCompany("company"+(i+1));
p.setCity("city"+(i+1));
set.add(p);
}
return set;
}
public Set> provideSet2(){
Set> set = new HashSet>();
for(int i=0;i Map p = new HashMap();
p.put("age",new Integer(i+1));
p.put("salary",new Long(1000+i*100));
p.put("name","name"+(i+1));
p.put("company","company"+(i+1));
p.put("city","city"+(i+1));
set.add(p);
}
return set;
}
[/code]
前天回答被楼主鄙视了下列,今天抽了十分钟写了这个思路,
我也觉得没什么东西,思路很简单,代码命名很粗。但楼主的功能应该能满足。
大家排砖。
给lz的建议
这样的操作 使用Set为输入参数 我不太能理解
为什么不使用一个二维数组呢?
这样的话 操作起来更加直观呀
感觉就是一个通用的汇总方法。Set中是po吧。
如果要通用可以走巧嘛,有篇文章你应该可以借鉴。
http://www.iteye.com/topic/39694
不就是个group by么...