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