2012-04-10 12 views
5

Tengo que solicitar las citas por fecha y hora. Tengo un ArrayList of Appointments y he intentado crear un comparador para comparar sus fechas y horas. Intento usar el método Collections.sort, pasándole el ArrayList of Appointments y el AppointmentComparator que he creado. Al compilar obtengo un "No es un método adecuado para ordenar". Aquí hay un enlace al mensaje de error total generado por el compilador: http://prntscr.com/7y4qbUso del comparador para ordenar ArrayList Java

Comparador:

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; 
} 

línea con error de sintaxis:

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

libro variable es un ArrayList de citas. clase ArrayList<Appointment>

AppointmentBook: Clase

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; 
} 

cita:

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; 
} 

}

+1

¿Puedes publicar toda la clase AppointmentComparator para nosotros? Puede haber un problema en la definición de clase en sí, y solo podemos especular sin un error de compilación/la definición de clase en sí. –

+1

¿También puede publicar cómo definió la variable del libro antes de llamar a Collections.sort()? –

+0

Bien actualizado para incluir toda la clase – Legendish

Respuesta

3

Desde el mensaje de error que parece que se olvidó de declarar su comparador como la implementación de la interfaz:

public class AppointmentComparator implements Comparator<Appointment> {} 

Necesita tener los implementos, no solo contener el método.

+0

Lo siento, no lo agregué inicialmente, pero sí, estaba allí y todavía recibo el error – Legendish

+0

@ user1323008 - ¿volver a compilar todo? si no, publique el código completo –

+0

Ill publicaré el código completo en la clase AppointmentBook, que es donde estoy teniendo el error. Sé con certeza que el Comparador está hecho correctamente. – Legendish

0

parece que no has implementado La interfaz comparador para su AppointmentComparator

1

, es necesario especificar su nueva AppointmentComparator

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

también podemos utilizar la clase interna para algunos casos:

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; 
} 

código para todas las clases: https://github.com/Evegen55/Java_DukeEdu_Coursera_2/blob/master/Earthquakes_Programming%20and%20Interfaces/src/earthquakes_programming_and_interfaces/QuakeEntry.java

Cuestiones relacionadas