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;
	}

  

原文地址:https://www.cnblogs.com/JAYIT/p/6183127.html