这是我的第一篇文章。我在大二暑假期间做CS专业和实习。我对Java有很多经验,但比较对象总是给我带来麻烦。
现在我正在编辑一个JSP页面,该页面在日历的不同日期有很多事件。每个事件都是保存在ArrayList(事件)中的HashMap。我需要对这些事件进行排序。
这是如何添加它们的示例。有很多逻辑,因为许多日期被保存为重复发生的日期(即“五月的第一个星期日”)。
convertedDate = convertJulian(rs.getDouble("starting_date"));
eventDate = convertedDate.split(",");
tempMap.put("id", rs.getString("cal_item_id"));
tempMap.put("description", rs.getString("description"));
tempMap.put("startingDate", rs.getInt("starting_date"));
tempMap.put("resource", rs.getString("resource_name"));
tempMap.put("eventMonth", eventDate[0]);
tempMap.put("eventDay", eventDate[1]);
tempMap.put("eventYear", eventDate[2]);
if (!parkYearsList.contains(eventDate[2]) && rs.getDouble("starting_date") >= startDate) {
parkYearsList.add(eventDate[2]);
}
if ( rs.getDouble("starting_date") >= startDate)
parkEventsList.add(tempMap);
要对它们进行排序,我尝试这样做。但它会删除ArrayList中的所有内容吗?
Collections.sort(parkEventsList, new MapComparator() );
这是我的比较器和toJulian
方法。我没有写大部分内容,因此有点难以看出可能出现问题的地方。
public class MapComparator implements Comparator
{
public int compare( Object object1 , Object object2)
{
String date1=(String)((HashMap)object1).get("startingDate");
String date2=(String)((HashMap)object2).get("startingDate");
Double date1Value = toJulian(date1);
Double date2Value = toJulian(date2);
return date1Value.compareTo(date2Value);
}
}
public static double toJulian(String ymd) {
String[] date = ymd.split(",");
int jgreg = 15 + 31*(10+12*1582);
int year=Integer.parseInt(date[0]);
int month=Integer.parseInt(date[1]);
int day=Integer.parseInt(date[2]);
int julianYear = year;
if (year < 0) julianYear++;
int julianMonth = month;
if (month > 2) {
julianMonth++;
}
else {
julianYear--;
julianMonth += 13;
}
double julian = (java.lang.Math.floor(365.25 * julianYear)
+ java.lang.Math.floor(30.6001*julianMonth) + day + 1720995.0);
if (day + 31 * (month + 12 * year) >= jgreg) {
// change over to Gregorian calendar
int ja = (int)(0.01 * julianYear);
julian += 2 - ja + (0.25 * ja);
}
return java.lang.Math.floor(julian);
}
答案 0 :(得分:0)
试试这个
public static Hashtable<String, String> sortValue(Hashtable<String, String> t)
{
//Transfer as List and sort it
ArrayList<Map.Entry<String, String>> l = new ArrayList<Entry<String, String>>(t.entrySet());
Hashtable<String,String> f = new Hashtable<String,String>();
Collections.sort(l, new Comparator<Map.Entry<String, String>>(){
public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) {
return o1.getValue().compareTo(o2.getValue());
}});}