欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java8 list中根据对象多属性去重

程序员文章站 2022-06-07 13:14:40
...

项目需求,需要使用 java8 实现 sql 里的 order 排序。使用 Comparator.comparing 和 thenComparing 实现

List<CnlEntity> shipList = new ArrayList<>();
List<CnlEntity> shipListTmp = new ArrayList<>();
Comparator<CnlEntity> byCustCd = Comparator.comparing(CnlEntity::getCustCd, Comparator.nullsLast(String::compareTo));
Comparator<CnlEntity> bySsd = Comparator.comparing(CnlEntity::getSsd, Comparator.nullsLast(Date::compareTo));
Comparator<CnlEntity> byGlobalNo = Comparator.comparing(e -> {
    if (StringUtils.isNotEmpty(e.getGlobalNo())) {
        if (e.getGlobalNo().length() > 6) {
            return e.getGlobalNo().substring(e.getGlobalNo().length() -6);
        } else {
            return e.getGlobalNo();
        }
    } else {
        return "";
    }
});
shipList = shipListTmp.stream().filter(entity -> StringUtils.equals(entity.getSubsidiaryCd(), "MJP"))
        .sorted(byCustCd.thenComparing(bySsd).thenComparing(byGlobalNo))
        .collect(Collectors.toList());

Comparator.nullsLast(String::compareTo) 可以防止 null 指针异常,遇到空数据排到最后。