Lsit<bean>list=new ArrayList<bean>();数据
username   flow(流量/kb)
zhanggsan  100
zhanggsan  100
zhanggsan  100
lisi       200要求结果
username flow(流量/kb)
zhangdan 300
lisi     200数据arraylist

解决方案 »

  1.   

    定义一个新的list 。然后循环判断相同的名称 flow 就往不加,反之就添加一个新的。
      

  2.   


    Map<String,Integer> rs = new HashMap<String,Integer>();//key用户名,value流量值
    for(Bean b : list) {
    Integer i = rs.get(b.username);
    if(i == null) {
    i = new Integer(0);
    }
    i += b.flow;//加和
    rs.put(b.username,i);
    }大概思路,未调试
      

  3.   

    搞定了,不知道是不是楼主想要的,我运行过了,符合楼主题目的要求
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;public class Sum
    {
    public static void main(String[] args)
    {
    Bean bean1 = new Bean();
    Bean bean2 = new Bean();
    Bean bean3 = new Bean();
    Bean bean4 = new Bean();

    bean1.setName("zhangsan");
    bean1.setFlow(100);

    bean2.setName("zhangsan");
    bean2.setFlow(100);

    bean3.setName("zhangsan");
    bean3.setFlow(100);

    bean4.setName("lisi");
    bean4.setFlow(200);

    List<Bean> list = new ArrayList<Bean>();

    list.add(bean1);
    list.add(bean2);
    list.add(bean3);
    list.add(bean4);

    Sum s = new Sum();

    Map<String, Integer> map;

    map = s.sum(list);

    Set<String> set = map.keySet();

    System.out.println("username    flow");
    for (Iterator<String> iter = set.iterator(); iter.hasNext();)
    {
    String key = (String)iter.next();
    Integer value = (Integer)map.get(key);

    System.out.println(key + "    " + value);
    }
    }

    public Map<String, Integer> sum(List<Bean> list)
    {
    Map<String, Integer> map = new HashMap<String, Integer>();
    for (int i=0; i<list.size(); i++)
    {
    if (null == map.get(list.get(i).getName()))
    {
    map.put(list.get(i).getName(), list.get(i).getFlow());
    }
    else
    {
    Integer in = (Integer)map.get(list.get(i).getName());
    in = new Integer(in.intValue() + list.get(i).getFlow());

    map.put(list.get(i).getName(), in);
    }
    }
    return map;
    }
    }class Bean
    {
    private String name;
    private int flow;
    public String getName()
    {
    return name;
    }
    public void setName(String name)
    {
    this.name = name;
    }
    public int getFlow()
    {
    return flow;
    }
    public void setFlow(int flow)
    {
    this.flow = flow;
    }

    }
      

  4.   


    import java.util.ArrayList;
    public class CsdnTest { public static void main(String[] args) {

    ArrayList<Bean> list = new ArrayList<Bean>();

    Bean b1 = new Bean("ZhangSan",100);
    Bean b2 = new Bean("ZhangSan",100);
    Bean b3 = new Bean("ZhangSan",100);
    Bean b4 = new Bean("LiSi",200);
    Bean b5 = new Bean("WangWu",300);
    list.add(b1);
    list.add(b2);
    list.add(b3);
    list.add(b4);
    list.add(b5);

    CsdnTest ct = new CsdnTest();

    //最终结果集合
    ArrayList<Bean> sReturnList = ct.returnList(list);
    }
    public ArrayList<Bean> returnList(ArrayList<Bean> list)
    {
    ArrayList<Bean> sReturnList = new ArrayList<Bean>();
    for(Bean b : list)
    {
    if(sReturnList.size()==0){sReturnList.add(b);}
    for(int i = 0; i<sReturnList.size();i++)
    {
    if((b.getName()).equals(sReturnList.get(i).getName()))
    {
    int ll = sReturnList.get(i).getLiuliang()+b.getLiuliang();
    sReturnList.get(i).setLiuliang(ll);
    }
    else
    {
    sReturnList.add(b);
    break;
    }
    }
    }
    return sReturnList;
    }}public class Bean { private String name = "";
    private int liuliang = 0;
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public int getLiuliang() {
    return liuliang;
    }
    public void setLiuliang(int liuliang) {
    this.liuliang = liuliang;
    }

    public Bean(String name,int ll)
    {
    this.name = name;
    this.liuliang = ll;
    }
    }sReturnListz是最终的集合
      

  5.   

    1楼的方法不错,可以新建一个list
      

  6.   

    亲,这种方式还是使用Map比较合适。。
    Map<String,Integer> map= new HashMap<String,Integer>();//key用户名,flow流量值
    //遍历用户集合
    for(User u : list) {
    //判断用户是否在map中存在
    if(map.containsKey(u.getName())){
    int i=map.get(u.getName());
    map.put(u.getName(), u.getFlow()+i);
    }else{
    map.put(u.getName(), u.getFlow());
    }
    }
      

  7.   

    有点让我想起来flyweight pattern时看到的一个并发例子8楼方法比较好。