怎么用java程序对集合里的对象按对象的某个属性排序,这个属性是日期(YYYY-MM-DD hh:mm),最好有个例子。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么用java程序对集合里的对象按对象的某个属性排序,这个属性是日期(YYYY-MM-DD hh:mm),最好有个例子。相关的知识,希望对你有一定的参考价值。
你的对象要实现Compare接口
class MyBean implements Comparable<MyBean>private Date sortKey;
public Date getSortKey()
return sortKey;
public void setSortKey(Date sortKey)
this.sortKey = sortKey;
@Override
public int compareTo(MyBean o)
return this.sortKey.compareTo(o.getSortKey());
然后直接调用Collections.sort(list);
public static void main(String[] args) throws ParseExceptionList<MyBean> list = new ArrayList<MyBean>();
Collections.sort(list);
参考技术A 那得把他们转成时间戳的形式,然后放在map里面比较,估计得用冒泡排序的方式。追问
什么是时间戳
??
网上百度一下吧,它讲的比较清楚,就是把时间格式转换了一下。再或者你不用时间戳,你把时间格式做成一个int类型的数据也可以比较的
追问为什么要放到map里面比较,我可以不用吗??
追答你不是要排序吗?按照时间的格式,那你放哪里?放list里面?list按照先后顺序的。
参考技术B 你可以用TreeMap,它是个二叉树,存的时候就排序了。Java怎样用数组创建对象,并对对象里的属性排序?
public class Employeepublic Employee()
super();
// TODO Auto-generated constructor stub
public Employee(String no, String name, Float salary)
super();
this.no = no;
this.name = name;
this.salary = salary;
private String no;// 工号
private String name;// 姓名
private Float salary = 0f;// 工资
public String getNo()
return no;
public void setNo(String no)
this.no = no;
public String getName()
return name;
public void setName(String name)
this.name = name;
public Float getSalary()
return salary;
public void setSalary(Float salary)
this.salary = salary;
@Override
public String toString()
return "Employee [no=" + no + ", name=" + name + ", salary=" + salary + "]";
public class TestEmployee
public static void main(String[] args)
TestEmployee testEmployee = new TestEmployee();
Employee[] emps = testEmployee.getEmployees();
emps = testEmployee.orderBySalary(emps);
for(int i = 0; i < emps.length; i++)
System.out.println(emps[i]);
/**
* 获取一个随机工资数 3-5K
* @return
*/
public Float getRandomFloat()
DecimalFormat dcmFmt = new DecimalFormat("0.00");
Random rand = new Random();
float f = 0f;
while(f < 3000)
f = rand.nextFloat() * 5000;
return Float.parseFloat(dcmFmt.format(f));
/**
* 获取员工
* @return 返回Employee[] 数组 length = 50
*/
public Employee[] getEmployees()
Employee[] emps = new Employee[50];
for(int i = 0; i < 50 ; i++)
String no = "no" + i;// 初始化员工号
String name = "name" + i;// 初始化姓名
Float salary = getRandomFloat();// 随机产生一个工资数
emps[i] = new Employee(no, name, salary);
return emps;
/**
* 根据工资高低 进行排序
* @param emps
* @return
*/
public Employee[] orderBySalary(Employee[] emps)
for(int i = 0; i < emps.length; i++)
for(int j = i + 1; j < emps.length; j++)
if(emps[i].getSalary() < emps[j].getSalary())
Employee temp = emps[i];
emps[i] = emps[j];
emps[j] = temp;
return emps;
参考技术A 用TreeSet储存学生类,用到了TreeSet,学生类需要重写hashCode和equal方法来防止出现重复对象,TreeSet是有序集合,如果要自定义对象大小比较方法,需要在学生类中重写compareTo方法,
public int compareTo(Object obj)
if(!(obj instanceof Student))
throw new RuntimeException("不是学生对象");
Student stu=(Student)obj;
if(this.age>stu.age)
return 1;
if(this.age==stu.age)
return this.name.compareTo(stu.name);
return -1;
然后
public static void main(String[] args)
TreeSet ts= new TreeSet();
ts.add(new Student("lisi01",22));
ts.add(new Student("lisi02",20));
ts.add(new Student("lisi03",18));
ts.add(new Student("lisi04",25));
ts.add(new Student("lisi05",18));
Iterator it = ts.iterator();
while(it.hasNext())
Student stu = (Student) it.next();
System.out.println("姓名:"+stu.getName()+" 年龄:"+stu.getAge());
输出的就是按年龄排序的
以上是关于怎么用java程序对集合里的对象按对象的某个属性排序,这个属性是日期(YYYY-MM-DD hh:mm),最好有个例子。的主要内容,如果未能解决你的问题,请参考以下文章
jsonobject如何获取一个集合里的某个对象所有属性的值