我有一个需要排序的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')
是否有执行这种操作的标准方法,还是应该在我的MessageWithComments类中添加一个名为“ mostRecentMessageDate”的变量,然后以这种方式对列表进行排序?
最佳答案
我建议使用自定义比较器。
您可以通过定义如何比较两个MessagesWithComments对象,然后使用Java Collections类进行排序来实现Comparator。
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()方法进行排序。