java如何对类对象进行排序:以日期排序为例

我们以时间排序为例,来实现java对类对象的排序,设java某class的定义如下:

class cmpData
{
String Name;
String sDate;
public cmpData(String Name,String strDate) {
this.Name=Name;
this.sDate=strDate;
}
}

这里sDate表示某个日期,格式为”yyyy-mm-dd hh:mm:ss”,若使得类具有比较大小功能,可以继承接口Comparable,并重写接口方法compareTo:

class cmpData implements Comparable<cmpData>
{
String Name;
String sDate;
public cmpData(String Name,String strDate) throws ParseException {
this.Name=Name;
this.sDate=strDate;
}
@Override
public int compareTo(cmpData user) {
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
	Date date1 = null;
	try {
		date1 = sdf.parse(this.sDate);
	} catch (ParseException e) {
		e.printStackTrace();
	}
	Date date2 = null;
	try {
		date2 = sdf.parse(user.sDate);
	} catch (ParseException e) {
		e.printStackTrace();
	}
return (int) ((date1.getTime() - date2.getTime())/1000);
}
}

这里的比较函数compareTo里,对于日期的比较先调用SimpleDateFormat的parse函数解析字符串表示的日期并转换为Date类对象,然后调用Date的getTIme()函数将其表示的日期转化为时间戳,注意这里返回的是long型的时间戳,且单位为毫秒,而compareTo得返回值为int故需除以1000并转为int。这样就可以调用Collections得sort函数进行排序了代码如下:

public class DateSort{
public static void main(String[] args) throws ParseException 	
{
	List<cmpData> list = new ArrayList<cmpData>();
	list.add(new cmpData("bus1","2020-09-23 13:20:53"));
	list.add(new cmpData("bus2","2018-12-23 23:17:25"));
	list.add(new cmpData("bus3","2015-12-23 23:27:25"));
	list.add(new cmpData("bus4","2019-12-23 23:37:25"));
	Collections.sort(list);
	for(int i=0;i<list.size();i++)
	{
		System.out.println(list.get(i).Name+" "+list.get(i).sDate);
	}
}
}

运行结果:

bus3 2015-12-23 23:27:25
bus2 2018-12-23 23:17:25
bus4 2019-12-23 23:37:25
bus1 2020-09-23 13:20:53

 

    原文作者:I_belong_to_jesus
    原文地址: https://blog.csdn.net/fangfanglovezhou/article/details/111937653
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞