java - 在覆盖超类中的另一个方法时对列表进行排序
问题描述
我需要一些指导: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());
}
}
}
问题是我需要以某种方式覆盖超类会议中的方法,因为我需要首先将它们从最低 END 日期排序到最高日期,而不是开始日期,如您在上面的会议类中看到的那样。所以换句话说,我怎样才能以我想使用 Collections.sort(或其他方法)的方式对这个列表进行排序,而不修改 Meeting 类和 prog 类注意:我不能使用 lambda/我可以添加其他类来帮助我出去
非常感谢您,如果还有其他需要改进的地方,请告诉我(我知道缩进并不完美,但我仍然习惯于在 stackoverflow 网站中放置代码)
祝大家度过愉快的一天,愉快的编码!
解决方案
因此,您可以像这样在 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);
}
}
推荐阅读
- mongodb - 注入 MongoDB EntityManager 中的 Helidon MP ValidationException
- javascript - 如何在 VueJS 中调度数组
- c - 我的代码或编译器有问题吗?
- android - 底部导航栏不会在 Flutter 中更改屏幕
- javascript - Svelte:按向上箭头和向下箭头键时,如何将焦点设置到列表项中的上一个/下一个元素?
- push-notification - 是否可以直接从另一个客户端发送推送通知消息?
- r - 将具有多个变量的长格式数据帧转换为宽格式整洁数据
- mongodb - MongoDB 3.6 自动完成失败“命令失败,错误 40324”
- jquery - bootstrap.min.js:6 未捕获的错误:Bootstrap 的 JavaScript 需要 jQuery 版本 1.9.1 或更高版本,但低于版本 4
- c# - WPF 应用程序中的 Drag'n'Drop 引发 InvalidOperationException