これは私の最初の投稿です。私は 2 年生の夏に CS を専攻し、インターンシップを行っています。私は Java の経験が豊富でしたが、オブジェクトの比較には常に問題がありました。
現在、カレンダーのさまざまな日にたくさんのイベントがある JSP ページを編集しています。各イベントは、(イベントの) ArrayList に保存された HashMap です。これらのイベントを並べ替える必要があります。
これは、それらがどのように追加されるかの例です。多くの日付が繰り返される日付 (つまり、「5 月の最初の日曜日」) として保存されているため、多くのロジックがあります。
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);
}