【问题标题】:Sort JAVA Parent list based on inner list of dates根据内部日期列表对 JAVA 父列表进行排序
【发布时间】:2019-07-02 12:08:26
【问题描述】:

我有一个类,我想根据该类中另一个子对象中的日期列表进行排序。

型号:

Student {

    String name;

    List<Action> actions;

}

Action {

    String type;
    Date lastActionDate;

}

所以现在我有我想要排序的列表,以便执行最新学生的动作排在第一位。

我试过了:

public Date getLatestActionDate() {
        return actions.stream().map(a -> a.lastActionDate).min(Date::compareTo).get();
    }

    @Override
    public int compareTo(Student o) {
        return getLatestActionDate().compareTo(o.getLatestActionDate());
    }

但无济于事。期待精彩的答案。

我希望学生列表排序。

【问题讨论】:

  • 备案:请考虑添加足够的“示例”数据和上下文代码以获得真正的minimal reproducible example。足以显示问题的代码,但人们可以快速下载并运行。
  • 输出是什么?
  • 但第一个值始终是不应该出现在此处的值,其余结果已排序。因此,问题仍然存在。

标签: java sorting java-stream comparator


【解决方案1】:

您可以使用您在Comparator 中创建的getLatestActionDate 方法并将列表排序为:

students.sort(Comparator.comparing(student -> getLatestActionDate(student.getActions())))

【讨论】:

  • students.sort(Comparator.comparing(student -> student.getLatestActionDate()));这就是我猜你所说的。但它仍然没有返回正确的排序列表。
【解决方案2】:

已修复:

对于父类:

Collections.sort(students, (o1, o2) -> o2.getActions().get(0).getLastActionDate().compareTo(o1.getActions().get(0).getLastActionDate()));

在子类 Action 中,将 getActions() 的 getter 更新为:

public List<Actions> getActions() {
        Collections.sort(actions, (o1, o2) -> o2.getLastActionDate().compareTo(o1.getLastActionDate()));
        return actions;
    }

所以我们首先对具有日期对象的内部对象进行排序,然后在父对象中,获取第一个 get(0) 对象并根据它对父对象进行排序。

我希望它对将来的人有所帮助。

【讨论】:

    猜你喜欢
    • 2020-07-02
    • 2021-03-07
    • 1970-01-01
    • 2019-04-15
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 2013-07-26
    相关资源
    最近更新 更多