首页 > 解决方案 > 在覆盖超类中的另一个方法时对列表进行排序

问题描述

我需要一些指导: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 网站中放置代码)

祝大家度过愉快的一天,愉快的编码!

标签: java

解决方案


因此,您可以像这样在 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);
 }

}


推荐阅读