在arrayList中按升序和降序比较日期不起作用

时间:2016-08-13 02:59:06

标签: sorting date comparator comparable

我有一组电子邮件对象。我需要按两个字段对它们进行排序。第一个字段是主题,我工作,另一个是按日期我无法得到。我尝试了一些其他人的解决方案,但似乎没有任何效果。以下是我的代码的摘录:

import java.time.LocalDateTime;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Comparator;
import java.util.Date;

public class Email implements Comparable{

private String to;
private String cc;
private String bcc;
private String subject;
private String body;
private GregorianCalendar timestamp;    //time that email was created

//constructors and getters and setters (besides timeStamp) omitted to save space

public Date getTimestamp() {
    return timestamp.getTime();
}
public void setTimestamp(GregorianCalendar timestamp) {
    this.timestamp = timestamp;
}

//This works
public static Comparator<Email> emailSubjectComparatorAscending = new Comparator<Email>(){
    public int compare(Email e1, Email e2) {
           String EmailSubject1 = e1.getSubject().toLowerCase();
           String EmailSubject2 = e2.getSubject().toLowerCase();

           return EmailSubject1.compareTo(EmailSubject2);
    }
};

//This works
public static Comparator<Email> emailSubjectComparatorDescending = new Comparator<Email>(){
    public int compare(Email e1, Email e2) {
           String EmailSubject1 = e1.getSubject().toLowerCase();
           String EmailSubject2 = e2.getSubject().toLowerCase();

           return EmailSubject2.compareTo(EmailSubject1);
    }
};

//This doesn't work
public static Comparator<Email> emailDateComparatorAscending = new Comparator<Email>(){
    @Override
    public int compare(Email o1, Email o2) {
        if(o1.getTimestamp().equals(o2.getTimestamp()))
            return 0;
        if(o2.getTimestamp().before(o1.getTimestamp()))
            return 1;
        else
            return -1;
    }
};

//This doesn't work
public static Comparator<Email> emailDateComparatorDescending = new Comparator<Email>(){
    @Override
    public int compare(Email o1, Email o2) {
        if(o1.getTimestamp().equals(o2.getTimestamp()))
            return 0;
        if(o1.getTimestamp().before(o2.getTimestamp()))
            return 1;
        else
            return -1;
    }
};



@Override
public String toString(){
    return("To: " + to + "\nCC: " + cc + "\nBCC: " + bcc + "\nSubject: " + subject + "\n" + body);
}

@Override
public int compareTo(Object o) {
    // TODO Auto-generated method stub
    return 0;
}

}

这是我的另一个类的一部分,我称之为这些排序方法:

import java.util.*;

public class Folder{

private ArrayList<Email> emails; //initialize?
private String name;
private String currentSortingMethod; //default = descending 


public Folder(String name) {
    super();
    this.name = name;
    currentSortingMethod = "sortByDateDescending";
    emails = new ArrayList<Email>(); //instantiate the arrayList
}

 //omitted getters, setters and other irrelevant methods

 //This works
 public void sortBySubjectAscending(){
    Collections.sort(emails, Email.emailSubjectComparatorAscending);

    currentSortingMethod = "sortBySubjectAscending";
 }

 //This works
 public void sortBySubjectDescending(){
    Collections.sort(emails, Email.emailSubjectComparatorDescending);

    currentSortingMethod = "sortBySubjectDescending";
 }

 //This doesn't work
 public void sortByDateAscending(){
     Collections.sort(emails, Email.emailDateComparatorAscending);

     currentSortingMethod = "sortByDateAscending";
        }



 //This doesn't work
 public void sortByDateDescending(){
     Collections.sort(emails, Email.emailDateComparatorDescending);

    currentSortingMethod = "sortByDateDescending";
 }

我对此非常困惑,我尝试了很多不同的方法而且都没有用。如果有人能解释如何完成这项工作,我将非常感激

0 个答案:

没有答案