list去除并且把值相加
package list; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class List2 {
public static void main(String[] args) {
List<User> us=new ArrayList<User>();
User u=new User("A",1);
us.add(u);
u=new User("C",2);
us.add(u);
u=new User("D",5);
us.add(u);
u=new User("A",4);
us.add(u);
u=new User("D",6);
us.add(u);
Map<String,Integer> map1=new HashMap<String,Integer>();
for(int i=0;i<us.size();i++){
map1.put(us.get(i).getName(),0); }
for(int i=0;i<us.size();i++){
if(map1.containsKey(us.get(i).getName())){
map1.put(us.get(i).getName(),us.get(i).getId()+map1.get(us.get(i).getName()));
} } for(Map.Entry<String, Integer> entry : map1.entrySet())
{
System.out.println(entry.getKey()+": "+entry.getValue());
}
} }
输出结果:
D: 11
A: 5
C: 2
另一种情况:

要判断两个都不同的时候第才新增不能用map这种方法,只能第一次取第一个值,后面的去循环判断是否与第一个相同,不同则新增,只有两个值都相同的时候才加数字
下面这种是根据serviceType去加数字
public List<EcrmOrderStatistics> loadStatistics(List<EOrderStat> statlist){
String prevAreaCode =""; //上一个地市
String prevProType ="" ; //上一个产品id
List<EcrmOrderStatistics> result =null;
int i=0;
if (null != statlist && statlist.size()>0) {
EcrmOrderStatistics stat=null;
if(statlist!=null&& statlist.size()>0){
prevProType = statlist.get(0).getProductName();
prevAreaCode =statlist.get(0).getAreaCode();
}
int add = 0;
int stop = 0;
int override = 0;
int changezl = 0;
int chaiji = 0;
int total=0;
for (EOrderStat row : statlist) {
if(null==stat){
stat =new EcrmOrderStatistics();
//stat.setProductId(prevProType);
stat.setAreaCode(prevAreaCode);
stat.setProductName(prevProType);
}
//当产品类型轮转
if (!prevProType.equals(row.getProductName())||!prevAreaCode.equalsIgnoreCase(row.getAreaCode())){
if(result==null){
result =new ArrayList<EcrmOrderStatistics>();
}
stat.setAddNum(add);
stat.setStopNum(stop);
stat.setOverrideNum(override);
stat.setChangezlNum(changezl);
stat.setChaijiNum(chaiji);
stat.setPerAddNum(add - chaiji);
stat.setArriveNum(total);
result.add(stat);
stat =new EcrmOrderStatistics();
prevProType =row.getProductName();
prevAreaCode =row.getAreaCode();
//stat.setProductId(prevProType);
stat.setAreaCode(prevAreaCode);
stat.setProductName(prevProType);
add = 0 ;
stop = 0;
override = 0;
changezl = 0;
chaiji = 0;
total=0;
}
if ("001".equals(row.getServiceType())|| "020".equals(row.getServiceType())||"007".equals(row.getServiceType()) ) {
add = add + row.getOrderNum();
} else if ("002".equals(row.getServiceType())) {
stop = stop + row.getOrderNum();
} else if ("003".equals(row.getServiceType())) {
override = override + row.getOrderNum();
} else if ("004".equals(row.getServiceType())||"022".equals(row.getServiceType())||"009".equals(row.getServiceType())) {
changezl = changezl + row.getOrderNum();
} else if ("005".equals(row.getServiceType())||"021".equals(row.getServiceType())||"008".equals(row.getServiceType())) {
chaiji = chaiji + row.getOrderNum();
}
total+=row.getOrderNum();
if((i++)==(statlist.size()-1) ){
if(result==null){
result =new ArrayList<EcrmOrderStatistics>();
}
stat.setAddNum(add);
stat.setStopNum(stop);
stat.setOverrideNum(override);
stat.setChangezlNum(changezl);
stat.setChaijiNum(chaiji);
stat.setPerAddNum(add - chaiji);
stat.setArriveNum(total);
result.add(stat);
}
}
}
return result;
}
list去除并且把值相加的更多相关文章
- (转载)php 合并数组中的数据,如果键值相等其值相加
(转载)http://hi.baidu.com/syxrrrr/item/7dfb2387343ce0874414cfdd /* * 合并数据,如果键值相等其值相加 * @param array $d ...
- js篇-数组合并其中属性值相同的项目且属性值相加
项目背景是:var a = [{id:1,num:"12"},{id:2,num:"13"},{id:3,num:"3"},{id:2,nu ...
- 【Excel】SUMIF 或用 筛选器 实现挑选含有某些字段的值,然后把这些值所对应的后面某列上的值相加
Background: 挑选含有某些字段的值,然后把这些值所对应的后面某列上的值相加.比如挑选下表中,所有带有“MX104”这个字段的值,然后把它的后面total那一列的值相加. Solution: ...
- 用C#写一个函数,在一个数组中找出随意几个值相加等于一个值 与迭代器对比
算法!用C#写一个函数,在一个数组中找出随意几个值相加等于一个值比如,数组{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20} 要找出那些数相加等 ...
- Python 字典值相加
#字典值相加 def union_dic(*objs): _keys = set(sum([obj.keys() for obj in objs],[])) _total = {} for _key ...
- Python两个字典键同值相加的几种方法
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/Jerry_1126/article/de ...
- js数组去重,id相同对某值相加合并
js数组去重,id相同对某值相加合并 案例1: 假设需要处理的数组结构. let arr =[ {id:'1', value:10}, {id:'1', value:20}, {id:'2', val ...
- PHP二维数组去除重复,重复值相加
$arr = array( array('id' => 122, 'name' => '张三', 'amount' => '1'), array('id' => 123, 'n ...
- c#linq去除重复项并将相同数据的数量字段值相加
这是执行前和执行后想要的效果 以下是用Sql语句实现的代码: select goodsno, goodsspec,SUM([count]) as count from goods group by g ...
随机推荐
- ASP.NET MVC3入门教程之参数(数据)传递
本文转载自:http://www.youarebug.com/forum.php?mod=viewthread&tid=98&extra=page%3D1 MVC模式的参数(数据)传递 ...
- .Net分布式异常报警系统-服务端Service
服务端的2个Service 1. HandleService: 从Redis中获取异常信息, 入库并发送通知到相关责任人. 2. HealthyCheckService: 对站点指定页面进行模拟访问 ...
- 自己存档:table 的css
border:0;margin:0;border-collapse:collapse;border-spacing:0;
- [POJ1284]Primitive Roots(原根性质的应用)
题目:http://poj.org/problem?id=1284 题意:就是求一个奇素数有多少个原根 分析: 使得方程a^x=1(mod m)成立的最小正整数x是φ(m),则称a是m的一个原根 然后 ...
- Unix 复制文件至指定目录
cp /gaps/log/20160504/bxdx_20160504.log.Z /home 将/gaps/log/20160504/bxdx_20160504.log.Z 文件复制到home路 ...
- 50-ln 简明笔记
为文件建立链接 ln [options] existing-file [new-link] ln [options] existing-file-list directory ln可以为一个或多个文件 ...
- Ceph性能优化总结(v0.94)
优化方法论 做任何事情还是要有个方法论的,“授人以鱼不如授人以渔”的道理吧,方法通了,所有的问题就有了解决的途径.通过对公开资料的分析进行总结,对分布式存储系统的优化离不开以下几点: 1. 硬件层面 ...
- [转]看懂ExtJS的API
原文地址:http://www.cnblogs.com/youring2/archive/2013/03/05/2944004.html ExtJS的功能很强大,相应的其API也很庞大,并且看起来并不 ...
- Shell命令_case
语法: case "变量" in "变量1") ... ;; #输出两个分号 "变量2") ...
- 【CodeVS 1163】访问艺术馆
http://codevs.cn/submission/2367697/ loli蜜汁(面向高一)树形dp是这道题的改编. 改编后的题目中每个展览厅的有多个不同的画,偷画的时间和画的价值也不同,求最大 ...