用Java对集合进行排序

时间:2018-11-22 07:44:17

标签: java spring hibernate sorting collections

使用的框架:弹簧

使用的ORM:休眠

我有两个班级

class BatchExceptionDetails{
...
private Set<BatchExceptionComments> batchExceptionComments;
}

class BatchExceptionComments implements Comparable<BatchExceptionComments>{
...
@Override
    public int compareTo(BatchExceptionComments o) {
        // TODO Auto-generated method stub

        return this.getAddedOn().compareTo(o.getAddedOn());
    }
}

它们被一对一映射。

BatchExceptionDetails中有一组BatchExceptionComments。

我想根据日期对集合进行排序。 BatchExcpetionComment具有类型为java.util.Date的属性,即addedOn。我希望最新评论成为set的第一个元素。

我收到的集合未排序。您能指导我哪里出问题了吗?

预先感谢

2 个答案:

答案 0 :(得分:5)

Set是一个接口,因此无法确定它是否可排序。您必须使用正确的实现,例如TreeSet。如果你想 强调这是一个有序集,您应该使用SortedSet界面。 TreeSet实现SortedSet

或者,您可以使用List,然后可以使用Collections.sort对其进行排序。

答案 1 :(得分:1)

经过反复研究后,我找到了解决方案。

我刚刚宣布了布景

private Set<BatchExceptionComments> batchExceptionComments;

我使用Order By来安排集合,而不是使用Comparable。

 <set name="batchExceptionComments" table="BATCH_EXCEPTION_COMMENTS" 
                inverse="true" fetch="select" lazy="false" order-by="commentId">
            <key>
                <column name="EXCEPTION_ID" not-null="true" />
            </key>
            <one-to-many class="com.beans.BatchExceptionComments" />
        </set>

我相信按ID排序会更好。

P.S。我使用的是hbm.xml而不是注释