使用Comparator对ArrayList Java进行排序

使用Comparator对ArrayList Java进行排序,java,sorting,arraylist,comparator,Java,Sorting,Arraylist,Comparator,我必须按日期和时间预约。我有一个预约列表,并尝试创建一个比较工具来比较他们的日期和时间。我正在尝试使用Collections.sort方法,将我创建的约会的ArrayList和AppointmentComparator传递给它。编译时,我得到一个“没有合适的排序方法”。下面是一个指向编译器生成的完整错误消息的链接: 比较国: public class AppointmentComparator implements Comparator<Appointment> { public i

我必须按日期和时间预约。我有一个预约列表,并尝试创建一个比较工具来比较他们的日期和时间。我正在尝试使用Collections.sort方法,将我创建的约会的ArrayList和AppointmentComparator传递给它。编译时,我得到一个“没有合适的排序方法”。下面是一个指向编译器生成的完整错误消息的链接:

比较国:

public class AppointmentComparator implements Comparator<Appointment>
{
public int compare(Appointment a, Appointment b)
{
    if (a.getDay() < b.getDay())
        return -1;

    if (a.getDay() == b.getDay())
    {
        if (a.getStart() < b.getStart())
            return -1;
        if (a.getStart() > b.getStart())
            return 1;
        return 0;
    }

    return 1;
}
变量簿是约会的数组列表<代码>阵列列表

委任书类别:

import java.util.ArrayList;
import java.util.Collections;

public class AppointmentBook
{
private ArrayList<Appointment> book;

public AppointmentBook()
{
    book = new ArrayList<Appointment>();
}

public void addAppointment(Appointment appt)
{
    book.add(appt);
    Collections.sort(book, new AppointmentComparator());
}

public String printAppointments(int day)
{
    String list = "";

    for (int i = 0; i < book.size(); i++)
    {
        if (book.get(i).getDay() == day)
        {
            list = list + "Appointment description: " + book.get(i).getDescription() + "\n" + "Date of Appointment: " +
            book.get(i).getDay() + "\n" + "Time: " + book.get(i).getStart() + " - " + book.get(i).getEnd() + "\n" + "\n";
        }
    }

    return list;
}

}

从错误消息中,您似乎忘记将比较器声明为实现接口:

public class AppointmentComparator implements Comparator<Appointment> {}
公共类指定比较器实现比较器{}

它需要实现部分,而不仅仅是包含方法。

似乎您还没有为您的AppointComparator实现comparator接口。comparator

您需要转换新的AppointComparator

Collections.sort(book, new (Comparator)AppointmentComparator());

在某些情况下,我们还可以使用内部类:

public int indexOfLargest(ArrayList<QuakeEntry> Data) {
    Comparator<QuakeEntry> cmtr = new Comparator<QuakeEntry>() {
        @Override
        public int compare(QuakeEntry t, QuakeEntry t1) {
            if (t.getMagnitude() < t1.getMagnitude())
                return -1;
            if (t.getMagnitude() == t1.getMagnitude()) 
                return 1;
            if (t1.getMagnitude() > t1.getMagnitude())
                return 0;
        return 1;
        }
    };

    QuakeEntry max = Collections.max(Data, cmtr);
    int maxIndex = Data.indexOf(max);
    //----------------------------------------------------------------------
    System.out.println("//---------------------------------------------------");
    System.out.println("ArrayList sorted by Magnitude using inner class with Comparator");
    System.out.println("//---------------------------------------------------");
    Collections.sort(Data, cmtr);
    for (QuakeEntry qe : Data) {
        System.out.println(qe);
    }


    return maxIndex;
}
public int indexoflagrest(ArrayList数据){
比较器cmtr=新比较器(){
@凌驾
公共整数比较(Guakentry t、Guakentry t1){
if(t.getMagnite()t1.getMagnite())
返回0;
返回1;
}
};
QuakeEntry max=Collections.max(数据,cmtr);
int maxIndex=Data.indexOf(max);
//----------------------------------------------------------------------
System.out.println(“/-----------------------------------------------------------------------”;
System.out.println(“使用带比较器的内部类按大小排序的ArrayList”);
System.out.println(“/-----------------------------------------------------------------------”;
Collections.sort(数据,cmtr);
用于(QuakeEntry qe:数据){
系统输出打印项次(qe);
}
返回最大索引;
}
所有类别的代码:

您能为我们发布整个AppointmentComparator类吗?类定义本身可能有问题,我们只能在没有编译器错误/类定义本身的情况下进行推测。您是否可以在调用Collections.sort()之前发布您是如何定义book变量的?Ok更新为包含整个类我们仍然需要查看
book
的声明,book是在类中创建的实例变量。它将由用户指定的约会对象填充。很抱歉,我最初没有添加该对象,但它确实存在,并且我仍然可以获得error@user1323008-重新编译所有内容?如果没有,发布完整代码我会将完整代码发布到AppointmentBook类,这就是我出错的地方。我确信比较器是正确的。好的,原始问题是用给出错误消息的类编辑的。忽略commentsHmm,我的下一步是检查并确保在重新编译之前删除旧输出中的所有现有.class文件。(通常是“clean and build”,不知道如何在blueJ中实现。)您也可以尝试显式调用方法,如
Collections.sort(book,comparator)您使用的编译器是什么?
Collections.sort(book, new (Comparator)AppointmentComparator());
public int indexOfLargest(ArrayList<QuakeEntry> Data) {
    Comparator<QuakeEntry> cmtr = new Comparator<QuakeEntry>() {
        @Override
        public int compare(QuakeEntry t, QuakeEntry t1) {
            if (t.getMagnitude() < t1.getMagnitude())
                return -1;
            if (t.getMagnitude() == t1.getMagnitude()) 
                return 1;
            if (t1.getMagnitude() > t1.getMagnitude())
                return 0;
        return 1;
        }
    };

    QuakeEntry max = Collections.max(Data, cmtr);
    int maxIndex = Data.indexOf(max);
    //----------------------------------------------------------------------
    System.out.println("//---------------------------------------------------");
    System.out.println("ArrayList sorted by Magnitude using inner class with Comparator");
    System.out.println("//---------------------------------------------------");
    Collections.sort(Data, cmtr);
    for (QuakeEntry qe : Data) {
        System.out.println(qe);
    }


    return maxIndex;
}