List list = new ArrayList();
    list.add("张三,3");
    list.add("张三,4");
    list.add("张三,5");
    list.add("李四,2");
    list.add("王五,3");
    list.add("马六,2");
    list.add("马六,2");
如何把list的数据拼成一个如下一个stringbuffer的字符
张三:15个,李四:2个 ,王五:3个,马六:4个

解决方案 »

  1.   

    如果list中的数据根据名字无序
    这个需要先统计一下,可以先把list映射到map里,key为前面的名字,value为后面的数字之和
    然后输出map
    如果有序
    直接遍历list,设置变量lastname,sum用于记载上一次的数据中的名字及次数之和
    当本次名字与上次不同时,则输出lastname,sum;并更新lastname,sum=0
      

  2.   

    //如果你非要一个StringBuffer,我就只好这么写了。
    List list = new ArrayList();
      list.add("张三,3");
      list.add("张三,4");
      list.add("张三,5");
      list.add("李四,2");
      list.add("王五,3");
      list.add("马六,2");
      list.add("马六,2");
    Map<String ,Integer> map=new HashMap<String, Integer>();
      for(Object i:list){
      String[] split=((String)i).split(",");
      if(split.length==2){
      if(map.containsKey(split[0])){
      map.put(split[0], map.get(split[0])+Integer.parseInt(split[1]));
      }else{
      map.put(split[0], Integer.parseInt(split[1]));
      }
      }
      }
    StringBuffer sb=new StringBuffer((map+"").replaceAll("\\{(.*?)=(\\d+)(,||$)\\}", "$1:$2个$3"));
    System.out.println(sb);
      

  3.   

    解决步骤
    (1)重写toString();
    (2)用Iterator迭代List中的值
    (3)StringBuffer sb = new StringBuffer(String str);