我有一个需要排序的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()方法进行排序。

10-01 06:40
查看更多