繁体   English   中英

使用比较器和函数对对象内的 collections 进行排序

[英]Sorting collections within objects using Comparator and functions

我有以下方法,并想在比较中添加另一个字段,但是我发现很难包含。

 private static int daoComparator(EDao eDao1, EDao eDao2) {
    return Comparator.comparing((EDao eDao) -> eDao.getObjectA().getStatus())
            .thenComparing(EDao::getUpdatedDate)
            .thenComparing(EDao::getCreatedDate)
            .thenComparing((EDao eDao) -> eDao.getObjectA().getId())
            .compare(eDao1, eDao2);
}

EDao class 中有ObjectA ,在ObjectA中有一个Collection<ObjectB> ObjectB中有一个String类型的Enum ,我需要在上面的daoComparator中检索和排序。 如何更新我的方法来检索和排序这个String Enum 它也需要是第一个比较。 Comparator器来自java.util package。

public class EDao
{
    private ObjectA objectA;
    private Date updatedDate;
    private Date createdDate;
}

public class ObjectA 
{   
    private String id;
    @Enumerated(EnumType.STRING)
    private String status;
    private Collection<ObjectB> objectB;
}

public class ObjectB
{ 
    // field I want to retrieve for sorting
    @Enumerated(EnumType.STRING)
    String RegStatus status;
}

我设法检索了状态',我只需要处理ObjectB可能是 null 的场景。

 private static int daoComparator(EDao eDao1, EDao eDao2) {
    return Comparator.comparing((EDao eDao) -> eDao.getObjectA().getObjectB().stream().findFirst().get().getStatus())
     .thenComparing((eDao eDao) -> eDao.getObjectA().getStatus())
     .thenComparing(EDao::getUpdatedDate)
     .thenComparing(EDao::getCreatedDate)
     .thenComparing((EDao eDao) -> eDao.getObjectA().getId())
     .compare(eDao1, eDao2);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM