如何把List中的数据按某一字段排序

sklyn1984 2011-12-08 04:06:38
ComparatorChain compChain = new ComparatorChain();
compChain.addComparator(new BeanComparator("status"),
true);


我这样写的,但是发现出来的结果并没有按该字段从大到小排序,status是百分比 如 22.18%,高手指教下
...全文
724 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
yunyantian_89 2011-12-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sklyn1984 的回复:]

要是我能SQL去ordery by我还跑程序里去写干嘛。 status是百分比的数字,这样写我测试出来确实不能正确的排序
[/Quote]同感。
zysnba 2011-12-12
  • 打赏
  • 举报
回复
package com;

import java.util.ArrayList;




public class T3 {
public static void main(String[] args) {
ArrayList<Student> list=new ArrayList<Student>();
Student a=new Student("e","20");
Student b=new Student("d","20");
Student c=new Student("c","20");
Student d=new Student("b","20");
Student e=new Student("a","20");
list.add(a);
list.add(b);
list.add(d);
list.add(e);
list.add(c);
Student Student = new Student();
Collections.sort(list,Student);

for(Student s:list){
System.out.println("结果 "+s.getName());
}
}




}


哈哈这个是测试类
哈哈
zysnba 2011-12-12
  • 打赏
  • 举报
回复
类bean

package com;

import java.util.Comparator;

public class Student implements Comparator{

private String name;
private String age;
public Student(){}
public Student (String name,String age){
this.name=name;
this.age = age;

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

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

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

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

}




test类
package com;

import java.util.Comparator;

public class Test implements Comparator {
public int compare(Object arg0, Object arg1) {
Student user0 = (Student) arg0;
Student user1 = (Student) arg1;

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

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

}
运行下看看效果

艳沐石 2011-12-09
  • 打赏
  • 举报
回复
public class ComparableTest {

public static void main(String[] args) {
Student[] ss = new Student[5];
for (int i = 0; i < 5; i++) {
int temp = (int) (Math.random() * 100);
ss[i] = new Student(temp+"", temp, temp+"");
}

// 加一个比较器
Arrays.sort(ss, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return o1.getName().compareTo(o2.getName());
}
});
for (Student s : ss) {
System.out.println(s);
}
}
}

class Student {

private String name;
private int grade;
private String cname;
public Student(String name, int grade, String cname) {
this.name = name;
this.grade = grade;
this.cname = cname;
}
/**
* @return Returns the name.
*/
public String getName() {
return name;
}
/**
* @param name The name to set.
*/
public void setName(String name) {
this.name = name;
}
/**
* @return Returns the grade.
*/
public int getGrade() {
return grade;
}
/**
* @param grade The grade to set.
*/
public void setGrade(int grade) {
this.grade = grade;
}
/**
* @return Returns the cname.
*/
public String getCname() {
return cname;
}
/**
* @param cname The cname to set.
*/
public void setCname(String cname) {
this.cname = cname;
}
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append(name);
sb.append(":");
sb.append(grade);
sb.append(",");
sb.append(cname);
return sb.toString();
}
}
dinglimin2009 2011-12-09
  • 打赏
  • 举报
回复
有特殊需求的话,可以实现comparable
xierong2011 2011-12-09
  • 打赏
  • 举报
回复
按学生的成绩排序
xierong2011 2011-12-09
  • 打赏
  • 举报
回复


import java.util.ArrayList;
import java.util.Collections;


public class StudentRanging {
public static void main(String[] args) {
ArrayList<Student> list=new ArrayList<Student>();
Student a=new Student("胖胖",30,90.5);
Student b=new Student("刘静",25,92.5);
Student c=new Student("苏凯",21,80.5);
Student d=new Student("许三多",28,90.5);
Student e=new Student("成才",20,90.5);
list.add(a);
list.add(b);
list.add(c);
list.add(d);
list.add(e);
Collections.sort(list);
for(Student s:list){
System.out.println("info:"+s);
}
}

}

class Student implements Comparable{
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", score=" + score +
'}';
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public double getScore() {
return score;
}

public void setScore(double score) {
this.score = score;
}

private String name;
private int age;

Student(String name, int age, double score) {
this.name = name;
this.age = age;
this.score = score;
}

private double score;


@Override
/**
* 实现按照成绩降序排序
*/
public int compareTo(Object o) {
Student s=(Student)o;
int result=0;
if(this.age>s.getAge())
result=1;
if(this.age<s.getAge())
result=-1;
return result;
}
}



给你一个例子 ,对你一定有用!
sklyn1984 2011-12-09
  • 打赏
  • 举报
回复
要是我能SQL去ordery by我还跑程序里去写干嘛。 status是百分比的数字,这样写我测试出来确实不能正确的排序
孟祥月 2011-12-08
  • 打赏
  • 举报
回复
Collections.sort(List<T> list)
chabale 2011-12-08
  • 打赏
  • 举报
回复
你可以在数据库查询的时候排序,order by compChain
良才2015 2011-12-08
  • 打赏
  • 举报
回复
Collections.sort(list, compChain);

这样是可以的。
sklyn1984 2011-12-08
  • 打赏
  • 举报
回复
	ComparatorChain compChain = new ComparatorChain();
compChain.addComparator(new BeanComparator("status"),
true);
Collections.sort(list, compChain);

我这样写的,但是排序不对
sklyn1984 2011-12-08
  • 打赏
  • 举报
回复
	ComparatorChain compChain = new ComparatorChain();
compChain.addComparator(new BeanComparator("status"),
true);
Collections.sort(list, compChain);

我这样写的,但是排序不对
空白-键 2011-12-08
  • 打赏
  • 举报
回复

java.util.Collections.sort(List<T> list)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧