[英]Using Comparator to order ArrayList Java
我必須按日期和時間訂購約會。 我有一個 ArrayList 的約會,並試圖創建一個比較器來比較他們的日期和時間。 我正在嘗試使用 Collections.sort 方法,將約會的 ArrayList 和我創建的 AppointmentComparator 傳遞給它。 編譯時出現“沒有合適的排序方法”。 這是編譯器生成的完整錯誤消息的鏈接: http://prntscr.com/7y4qb
比較器:
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;
}
有語法錯誤的行:
Collections.sort(book, new AppointmentComparator());
變量 book 是一個 ArrayList 的約會。 ArrayList<Appointment>
預約電話class:
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;
}
預約class:
public class Appointment
{
private String desc;
private int day; //in format mmddyyyy
private int start; //in format hhmm
private int end; //in format hhmm
public Appointment(String description, int aptDay, int startTime, int endTime)
{
desc = description;
day = aptDay;
start = startTime;
end = endTime;
}
public String getDescription()
{
return desc;
}
public int getDay()
{
return day;
}
public int getStart()
{
return start;
}
public int getEnd()
{
return end;
}
}
從錯誤消息來看,您似乎忘記了將比較器聲明為實現接口:
public class AppointmentComparator implements Comparator<Appointment> {}
它需要有實現部分,而不僅僅是包含方法。
您需要投放新的 AppointmentComparator
Collections.sort(book, new (Comparator)AppointmentComparator());
在某些情況下,我們也可以使用內部 class:
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;
}
似乎您還沒有為您的 AppointmentComparator 實現 The comparator interface
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.