在java中按2个不同的子对象排序对象列表

时间:2016-10-14 16:32:54

标签: java sorting

我有一个需要排序的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类中,然后按此方式对列表进行排序?

2 个答案:

答案 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()方法进行排序。