List 分组求和算法

luallen 2011-04-25 09:52:50
有一个List<a> list类型的list如下

a.name1 a.name2 num
1 x 12
1 y 2
2 z 3
3 q 3
4 f 12
4 z 5

分组之后得到
a.name1 a.name2 num
1 x 12
1 y 2
1合计 null 14
2 z 3
3 q 3
4 f 12
4 z 5
4合计 null 5


有多行name1的就相加num 然后在list里新增一条合计,没有多行name1的 就不管
...全文
521 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qingyuan18 2011-04-25
  • 打赏
  • 举报
回复
按name1排序之后再遍历,同时定义临时List存放结果
qybao 2011-04-25
  • 打赏
  • 举报
回复
//先按a.name1排序
Collections.sort(list, new Comparator<a>() {
public int compare(a o1, a o2) {
if (o1 == null) {return ((o2==null) ? 0 : -1);}
else if (o2 == null) {return 1;}
else if (o1.name1 == null) {return ((o2.name1==null) ? 0 : -1);}
else if (o2.name1 == null) {return 1;}
else {return Integer.valueOf(o1.name1).compareTo(Integer.valueOf(o2.name1));}
}
});
//再求和
List<a> result = new ArrayList<a>();
String lastName = list.get(0).name1;
int sum = 0;
for (a aa : list) {
if (lastName.equals(aa.name1)) { //这里自己考虑null的判断吧
sum += aa.num;
} else {
a aaa = new a();
aaa.name1 = lastName;
aaa.name2 = null;
aaa.num = sum;
result.add(aaa);
lastName = aa.name1;
sum = aa.num;
}
result.add(aa);
}
  • 打赏
  • 举报
回复
遍历,并计算,然后依次加进去
tianfeng5558584 2011-04-25
  • 打赏
  • 举报
回复
没看懂哦
napier 2011-04-25
  • 打赏
  • 举报
回复
1.以a.name1为关键字,创建一个HashMap对象,对象的值包括a.name,次数,和,
2.然后遍历list中的元素,如果此元素的name1在HashMap对象中存在,那么就把其次数加一,和再相加,如果不存在,就添加一个进去,
3.遍历HashMap对象,把次数大于1的元素添加到list中
4.对list对象根据name1进行排序
5.完成
caibird1024 2011-04-25
  • 打赏
  • 举报
回复
先排序Collections.sort(list)
devin_jia 2011-04-25
  • 打赏
  • 举报
回复
也不懂 你是把name1的分一组求和 另一组求和不?查了+?
wangjn1982 2011-04-25
  • 打赏
  • 举报
回复
首先,根据a.name1排序
然后,循环list<a>,对比当前a.name1和上一个a.name1是否相同。若不同且上一个a.name1的个数大于1,则向结果集List<a> listRtn添加一条合计并把当前的记录添加到listRtn中;反之,则把当前的记录添加到listRtn中
亲努力啊 2011-04-25
  • 打赏
  • 举报
回复
理解能力不行没看懂

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧