一尘不染

Java如何通过某些属性对对象列表进行排序

java

public class ActiveAlarm {
    public long timeStarted;
    public long timeEnded;
    private String name = "";
    private String description = "";
    private String event;
    private boolean live = false;
}

List<ActiveAlarm>骗局。如何按升序排序timeStarted,然后按timeEnded?有人可以帮忙吗?我知道在C ++中具有通用算法和重载运算符<,但是我是Java新手。


阅读 915

收藏
2020-03-07

共1个答案

一尘不染

使ActiveAlarm实现Comparable<ActiveAlarm>Comparator<ActiveAlarm>在单独的类中实现。然后致电:

Collections.sort(list);

要么

Collections.sort(list, comparator);

通常,Comparable<T>如果有一个单一的“自然”排序顺序,则实施是个好主意…否则(如果你碰巧想要按特定顺序进行排序,但可能同样容易地希望使用另一个顺序),则最好实现Comparator<T>。老实说,这种特殊情况可能会发生任何一种……但是我可能会坚持使用更灵活的Comparator<T>选择。

编辑:示例实现:

public class AlarmByTimesComparer implements Comparator<ActiveAlarm> {
  @Override
  public int compare(ActiveAlarm x, ActiveAlarm y) {
    // TODO: Handle null x or y values
    int startComparison = compare(x.timeStarted, y.timeStarted);
    return startComparison != 0 ? startComparison
                                : compare(x.timeEnded, y.timeEnded);
  }

  // I don't know why this isn't in Long...
  private static int compare(long a, long b) {
    return a < b ? -1
         : a > b ? 1
         : 0;
  }
}
2020-03-07