在重写超类中的另一个方法时对列表进行排序



我需要一些指导,请:D

class Meeting implements Comparable<Meeting> {
private Calendar start, end;
public Meeting(Calendar start, Calendar end) {
if (start.compareTo(end) > 0)
throw new IllegalArgumentException("Invalid date");
this.start = start;
this.end = end;
}
public Calendar getStarted() {
return start;
}
public Calendar getEnding() {
return end;
}
public int compareTo(Meeting m) {
return this.start.compareTo(m.getStarted());
}
public String toString() {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
return sdf.format(start.getTime()) + " -> " + sdf.format(end.getTime());
}
}
class Planificator extends Meeting {
public Planificator(Calendar start, Calendar end) {
super(start, end);
}
public static void plan(List<Meeting> l) {
Collections.sort(l) // This should sort them from the lowest end date to the highest
}
}
public class prog {
public static void main(String[] args) throws Exception {
try {
List<Meeting> l = new ArrayList<>();
l.add(new Meeting(new GregorianCalendar(1,2,3), new GregorianCalendar(2,2,3)));
l.add(new Meeting(new GregorianCalendar(1, 2, 3), new GregorianCalendar(5, 2, 3)));
l.add(new Meeting(new GregorianCalendar(3, 2, 3), new GregorianCalendar(5, 2, 3)));
Planificator.plan(l);
System.out.println(l);  
} catch (IllegalArgumentException e) {
System.out.print(e.getMessage());
}
}
}

问题是,我需要以某种方式覆盖超类Meeting中的方法,因为我需要首先将它们从最低的结束日期排序到最高的开始日期,而不是像上面在Meeting类中看到的那样。换句话说,如何在不修改Meeting类和prog类的情况下,使用Collections.sort(或其他方法(按照我想要的方式对列表进行排序注意:我不能使用lambda/我可以添加其他类来帮助我完成

提前非常感谢,如果我还有什么需要改进的地方,请告诉我(我知道缩进不完美,但我仍然习惯于你如何在stackoverflow网站中放置代码(

祝大家度过美好的一天,编码快乐!

将此方法添加到Meeting类:

public static int compareByEndDateAsc(Meeting m1, Meeting m2){
return m1.getEnding().compareTo(m2.getEnding());
}

更改提供比较器的计划方法:

public static void plan(List<Meeting> l) {
Collections.sort(l, Meeting::compareByEndDateAsc);
}

}

并对边缘案例进行新的测试。

因此,您可以在Planificator类中添加一个Comparator,如下所示:

class Planificator extends Meeting {
public Planificator(Calendar start, Calendar end) {
super(start, end);
}
public static int compareByEndDateAsc(Meeting m1, Meeting m2){
return m1.getEnding().compareTo(m2.getEnding());
}
public static void plan(List<Meeting> l) {
Collections.sort(l,Planificator::compareByEndDateAsc);
}

}

最新更新