java list 排序 并重新赋值的问题

Test3 t1 = new Test3(88, 11,"phl");

Test3 t2 = new Test3(6, 22,"aaa");

Test3 t3 = new Test3(3, 33,"abc");

Test3 t4 = new Test3(5, 44,"aac");

Test3 t5 = new Test3(4, 55,"adc");

Test3 t6 = new Test3(4, 66,"aac");

Test3 t7 = new Test3(4, 77,"aaa");

        List<Test3> ts = new ArrayList<Test3>();  
        ts.add(t1到t7);

        我想获得的list是这样的:
        id=3;sz=33;name=abc
    id=4;sz=0;name=aaa
    id=4;sz=0;name=aac
    id=4;sz=55+66+77=198;name=adc
    id=5;sz=44;name=aac
    id=6;sz=22;name=aaa
    id=88;sz=11;name=phl

比如重复项id=4 有3个 则1和2个的sz属性设置为0 第3个设置为sz1+sz2+sz3
就是list排序后 对重复项处理

//一个POJO例子

class User {
String name;
String age;

public User(String name,String age){
this.name=name;
this.age=age;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

//具体的比较类,实现Comparator接口

import java.util.Comparator;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;

public class ComparatorUser implements Comparator{

public int compare(Object arg0, Object arg1) {
User user0=(User)arg0;
User user1=(User)arg1;

//首先比较年龄,如果年龄相同,则比较名字

int flag=user0.getAge().compareTo(user1.getAge());
if(flag==0){
return user0.getName().compareTo(user1.getName());
}else{
return flag;
}

}

}

//测试类
public class SortTest {

public static void main(String[] args){
List userlist=new ArrayList();
userlist.add(new User("dd","4"));
userlist.add(new User("aa","1"));
userlist.add(new User("ee","5"));
userlist.add(new User("bb","2"));

userlist.add(new User("ff","5"));
userlist.add(new User("cc","3"));
userlist.add(new User("gg","6"));

ComparatorUser comparator=new ComparatorUser();
Collections.sort(userlist, comparator);

for (int i=0;i<userlist.size();i++){
User user_temp=(User)userlist.get(i);
System.out.println(user_temp.getAge()+","+user_temp.getName());
}

}
}

//首先年龄排序,如果年龄相同,则按名字排序

结果:
1, aa
2, bb
3, cc
4, dd
5, ee //注意:同样是5岁的人,则比较名字(ee,ff),然后排序
5, ff
6, gg

参照着写
http://www.blogjava.net/zygcs/archive/2008/01/17/176032.html

不是排序的问题,是排序后,对重复项处理的问题

// 排序,通过泛型和匿名类来实现

Collections.sort(ts, new Comparator() {

int temp=0;
public int compare(Test3 o1, Test3 o2) {

int result = o1.getId() - o2.getId();

if (result == 0) {
temp=temp+o1.getSz()+o2.getSz();
System.out.println(">>>>>>>>>>>>>>>>>>>>temp:"+temp);
System.out.println(">>>>>>>>>>>>>>>>>>>>o1.getSz()+o2.getSz():"+o1.getSz()+o2.getSz());
o1.setSz(0);
o2.setSz(temp);
result = o1.getName().compareTo(o2.getName());

}else{
temp=0;
}

return result;

}

});

我这个不对,我的结果是
id=3;sz=33;name=abc
id=4;sz=0;name=aaa
id=4;sz=77;name=aac
id=4;sz=121;name=adc
id=5;sz=44;name=aac
id=6;sz=22;name=aaa
id=88;sz=11;name=phl

我希望的结果是:
id=3;sz=33;name=abc
id=4;sz=0;name=aaa
id=4;sz=0;name=aac
id=4;sz=55+66+77=198;name=adc
id=5;sz=44;name=aac
id=6;sz=22;name=aaa
id=88;sz=11;name=phl

可以先用set集合 去重复项,然后你自己定一个排序标准方法 然后进行排序

package com.test;

import java.util.ArrayList;
import java.util.List;

public class TestJava {

public static Test setTest(int id,int age,String name) {
    Test t=new Test();
    t.setId(id);
    t.setAge(age);
    t.setName(name);
    return t;
}
public static List<Test> RT(List<Test> lt){
    for (int i = 0; i < lt.size(); i++) {
        for (int j = 0; j < lt.size(); j++) {
            if(lt.get(i).getId()!=lt.get(j).getId()){
                //a1是小的那个
                Test a1=lt.get(i).getId()>lt.get(j).getId()?lt.get(i):lt.get(j);
                //a2是大的那个
                Test a2=lt.get(i).getId()<lt.get(j).getId()?lt.get(i):lt.get(j);
                lt.set(i, a1);
                lt.set(j, a2);
            }else{
                //b1是小的那个
                Test b1=lt.get(i).getAge()>lt.get(j).getAge()?lt.get(i):lt.get(j);
                //b2是大的那个
                Test b2=lt.get(i).getAge()<lt.get(j).getAge()?lt.get(i):lt.get(j);
                //同ID把 age小的把自己age的值给大的那个
                b2.setAge(b1.getAge()+b2.getAge());
                //将同ID age小的age值设成0
                b1.setAge(0);
                lt.set(i, b2);
                lt.set(j, b1);
            }
        }
    }
    return lt;
}
public static void main(String[] args) {

    List<Test> list_1=new ArrayList<Test>();
    Test t1=setTest(88,11,"phl");
    list_1.add(t1);
    Test t2=setTest(6,22,"aaa");
    list_1.add(t2);
    Test t3=setTest(3,33,"abc");
    list_1.add(t3);
    Test t4=setTest(5,44,"aac");
    list_1.add(t4);
    Test t5=setTest(4,66,"aac");
    list_1.add(t5);
    Test t6=setTest(4,55,"aac");
    list_1.add(t6);
    Test t7=setTest(4,77,"aaa");
    list_1.add(t7);

    List<Test> list_2=RT(list_1);
    for (Test test : list_2) {
        System.out.println(">>>ID:"+test.getId()+">>>>AGE:"+test.getAge()+">>>>NAME:"+test.getName());
    }

}

}
结果:

ID:3>>>>AGE:33>>>>NAME:abc
ID:4>>>>AGE:0>>>>NAME:aaa
ID:4>>>>AGE:0>>>>NAME:aac
ID:4>>>>AGE:198>>>>NAME:aac
ID:5>>>>AGE:44>>>>NAME:aac
ID:6>>>>AGE:22>>>>NAME:aaa
ID:88>>>>AGE:0>>>>NAME:phl