在一个 List中有一个Student对象,Student里面有2个属性,分别是 Name和Age
name         age
张三         20
张三         21
李四         15
张三         22
李四         20
王五         30
我现在在要求是出一个结果结果是 name       age
张三       63
李四       35
王五       30
也是就说把相同的Name的合并,同时汇总Age(Student事先也没有排序,是随机的)
请高手们帮忙 .谢谢 ,很着急.50分

解决方案 »

  1.   

    1.逐个遍历name有重复的List
    2.找的重复的元素,把值相加
    3.放到一个新的List里
      

  2.   

    用Map啊,就不应该用List来解决这问题.
      

  3.   

    List newList = null;
    for(int i=0; i<stuList.size(); i++){
       Student stu = (Student) stuList.get(i);
       if(newList == null){
           newList = new ArrayList();
           newList.add(stu);
       }else{
           for(int j=0; j<newList.size(); j++){
              Student stu1 = (Student) newList.get(j);
              if(stu1.getName().equals(stu.getName())){
                  stu1.setAge(stu1.getAge() + stu.getAge());
                  newList.add(stu1);
              }else{
               newList.add(stu);
              }
           }
       }
    }
      

  4.   

    如果是数据库中的数据的话直接group by求和就得了。
      

  5.   

    继承List,重新定义hash()和equals(),在equals()中将Age相加
      

  6.   

    1L 的可以 但是遍历的太多了
    每一次使用list中的元素后 要删除该元素
    不断的循环 直到原来的list的长度为零
      

  7.   

    //在一个 List中有一个Student对象
    List<Student> list = ... ;//楼主说的那个List对象。
    Map<String,Integer> result = new HashMap<String,Integer>();
    for(Student stu : list){
      String name = stu.getName();
      int age = stu.getAge();
      result.put(name,result.get(name)==null?age:age+result.get(name));
    }
    //result里面就是结果。
      

  8.   

    这个问题可以用排序来解决,只不过原来是考虑相同键的次序,现在是相加相同值。只要排序方法选择合理,可以就地解决,而且时间复杂度不大于lgn。