问题描述
- java list 排序 并重新赋值的问题
- Test3 t1 = new Test3(88 11phl"");
Test3 t2 = new Test3(6 22aaa"");
Test3 t3 = new Test3(3 33abc"");
Test3 t4 = new Test3(5 44aac"");
Test3 t5 = new Test3(4 55adc"");
Test3 t6 = new Test3(4 66aac"");
Test3 t7 = new Test3(4 77aaa"");
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
解决方案
参照着写
http://www.blogjava.net/zygcs/archive/2008/01/17/176032.html
解决方案二:
比如重复项id=4 有3个 则1和2个的sz属性设置为0 第3个设置为sz1+sz2+sz3
就是list排序后 对重复项处理
解决方案三:
//一个POJO例子
class User {
String name;
String age;
public User(String nameString 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());
}
}
}
//首先年龄排序,如果年龄相同,则按名字排序
结果:
解决方案四:
不是排序的问题,是排序后,对重复项处理的问题
解决方案五:
// 排序通过泛型和匿名类来实现
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集合 去重复项,然后你自己定一个排序标准方法 然后进行排序
解决方案八:
可以先用set集合 去重复项,然后你自己定一个排序标准方法 然后进行排序
解决方案九:
package com.test;
import java.util.ArrayList;
import java.util.List;
public class TestJava {
public static Test setTest(int idint ageString 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(8811phl""); list_1.add(t1); Test t2=setTest(622aaa""); list_1.add(t2); Test t3=setTest(333abc""); list_1.add(t3); Test t4=setTest(544aac""); list_1.add(t4); Test t5=setTest(466aac""); list_1.add(t5); Test t6=setTest(455aac""); list_1.add(t6); Test t7=setTest(477aaa""); 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