请教 分组汇总 问题

场景:

有多条记录 需要 根据 字段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么...