我有一个需要排序的DTO类,它看起来像这样:
public class MessagesWithComments {
private Message parentMessage;
private List<Message> childMessages;
}
我的留言课:
public class Message {
private String message;
private Date createdDate;
}
我的服务然后返回MessagesWithComments列表。
public List<MessagesWithComments> getParentsWithComments(....) {....}
我需要对这些进行排序,以便每个MessageWithComments的最新消息日期首先出现,棘手的部分是日期可以在parentMessage内部或在childMessages列表中。例如:
MessageWithComments 1
parentMessage date = '2016-10-13 10:40pm'
no child messages
MessageWithComments 2
parentMessage date = '2016-10-10 10:40pm'
childMessage date = '2016-10-11 12:31pm'
childMessage date = '2016-10-14 11:21pm'
MessageWithComments 3
parentMessage date = '2016-10-11 10:40am'
childMessage date = '2016-10-12 12:31pm'
childMessage date = '2016-10-13 10:28pm'
所以在这个例子中,我将按顺序返回MessagesWithComments列表:
2(most recent date of '2016-10-14 11:21pm'),
1(most recent date of '2016-10-13 10:40pm'),
3(most recent date of 2016-10-13 10:28pm')
是否存在执行此类操作的标准方法,还是应该将另一个变量添加到名为“mostRecentMessageDate”的MessageWithComments类中,然后按此方式对列表进行排序?
答案 0 :(得分:1)
正如一些评论已经指出你可以使用Comparator
。另一种选择是实现Comparable
接口。这是一些很好的info regarding the difference
答案 1 :(得分:1)
我建议使用自定义比较器。
您可以通过定义如何比较两个MessagesWithComments对象来实现Comparator,然后使用Java Collections类进行排序。
class MessagesWithCommentsComparator implements Comparator<MessagesWithComments> {
@Override
public int compare(MessagesWithComments o1, MessagesWithComments o2) {
// parse the MessagesWithComments objects to determine order
}
}
然后你可以使用Collections类:
Collections.sort(messagesWithCommentsList, new MessagesWithCommentsComparator());
通过定义如何比较MessagesWithCommentsComparator中的两个MessagesWithComments对象,Collections类将知道如何使用您重写的compare()方法进行排序。