0

これは私の最初の投稿です。私は 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);
}
4

1 に答える 1