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

在java中按2个不同的子对象对对象列表进行排序,java,sorting,Java,Sorting,我有一个DTO类需要排序,它如下所示: public class MessagesWithComments { private Message parentMessage; private List<Message> childMessages; } 然后,我的服务返回一个MessagesWithComments列表 public List<MessagesWithComments> getParentsWithComments(....)

我有一个DTO类需要排序,它如下所示:

public class MessagesWithComments {    
     private Message parentMessage;
     private List<Message> childMessages;
}
然后,我的服务返回一个MessagesWithComments列表

public List<MessagesWithComments> getParentsWithComments(....) {....}
留言和评论2

留言和评论3

因此,在本例中,我将按以下顺序返回我的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对象来实现Comparator,然后使用Java Collections类进行排序

class MessagesWithCommentsComparator implements Comparator<MessagesWithComments> {

    @Override
    public int compare(MessagesWithComments o1, MessagesWithComments o2) {
        // parse the MessagesWithComments objects to determine order
    }
}

通过定义如何比较MessagesWithCommentsComparator中的两个MessagesWithComments对象,Collections类就知道如何使用您重写的compare()方法进行排序。

我建议使用自定义比较器

您可以通过定义如何比较两个MessagesWithComments对象来实现Comparator,然后使用Java Collections类进行排序

class MessagesWithCommentsComparator implements Comparator<MessagesWithComments> {

    @Override
    public int compare(MessagesWithComments o1, MessagesWithComments o2) {
        // parse the MessagesWithComments objects to determine order
    }
}

通过定义如何比较MessagesWithCommentsComparator中的两个MessagesWithComments对象,Collections类就知道如何使用compare()进行排序方法。

使用一些自定义比较器怎么样?为此使用自定义
比较器。
谢谢@RC和@Victor Sorokin的响应,但我该怎么做?我知道我可以比较日期并对我的子对象列表进行排序
childMessages
,或者根据
parentMessage日期对我的
messages列表进行排序,但是我如何实现
比较器
,它检查
parentMessage日期
childMessages列表中的所有日期
,以便它可以告诉我每个
MessageWithComments
对象旁边的最新日期?使用一些自定义比较器如何?使用自定义
比较器
查看谢谢@RC和@Victor Sorokin的回复,但我该怎么做呢?我知道我可以比较日期并对我的子对象列表进行排序
childMessages
,或者根据
parentMessage日期对我的
messages列表进行排序,但是我如何实现
比较器
,该比较器检查
父消息日期
子消息列表中的所有日期
,这样它就可以告诉我每个
带有注释的MessageWithComments
对象的最新日期了?哇,这真是太好了。我试图回答,但问题变得太复杂了。这太简单了,真是太好了。我试图回答,但问题变得太复杂了。这要简单得多
parentMessage date = '2016-10-11 10:40am'
   childMessage date = '2016-10-12 12:31pm'
   childMessage date = '2016-10-13 10:28pm'
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') 
class MessagesWithCommentsComparator implements Comparator<MessagesWithComments> {

    @Override
    public int compare(MessagesWithComments o1, MessagesWithComments o2) {
        // parse the MessagesWithComments objects to determine order
    }
}
Collections.sort(messagesWithCommentsList, new MessagesWithCommentsComparator());