怎么用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 ParseException 
    List<MyBean> list = new ArrayList<MyBean>();
    Collections.sort(list);

参考技术A 那得把他们转成时间戳的形式,然后放在map里面比较,估计得用冒泡排序的方式。追问

什么是时间戳
??

追答

网上百度一下吧,它讲的比较清楚,就是把时间格式转换了一下。再或者你不用时间戳,你把时间格式做成一个int类型的数据也可以比较的

追问

为什么要放到map里面比较,我可以不用吗??

追答

你不是要排序吗?按照时间的格式,那你放哪里?放list里面?list按照先后顺序的。

参考技术B 你可以用TreeMap,它是个二叉树,存的时候就排序了。

Java怎样用数组创建对象,并对对象里的属性排序?

public class Employee 

public 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),最好有个例子。的主要内容,如果未能解决你的问题,请参考以下文章

Java怎样用数组创建对象,并对对象里的属性排序?

jsonobject如何获取一个集合里的某个对象所有属性的值

如何对List集合中的对象进行按某个属性排序

java中怎么 对数组里的 元素 按出现的顺序排序

JAVA-初步认识-常用对象API(集合框架-Map集合-存储自定义对象)

如何对List集合中的对象进行排序?