You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于myDto对象中dogs列表首个元素排序myDto集合?

按MyDto中首个Dog的name排序列表

当然可以实现这个需求!你只需要修改排序用的Comparator逻辑,从每个MyDto对象中提取dogs列表的首个Dog的name属性作为排序依据即可。下面分两种场景给出实现方案:

1. 假设所有MyDto的dogs列表都非空

如果能确保每个MyDto的dogs列表至少包含一个Dog对象,直接用下面的代码就可以完成升序排序:

myDtoList.sort(Comparator.comparing(
    dto -> dto.getDogs().get(0).getName()
));

对应你给出的例子,这段代码会把三个条目按首个Dog的name从小到大排列,最终顺序就是条目3(Ann)→ 条目2(Fancy)→ 条目1(Zoro),完全符合你的预期。

2. 处理dogs列表为空的边界情况

如果存在dogs列表为空或者null的MyDto对象,上面的代码会抛出IndexOutOfBoundsException或NullPointerException。这时可以添加空值判断,把这类特殊对象统一排在最前面或最后面:

方式一:将空dogs的MyDto排在最前面

myDtoList.sort(Comparator.comparing(
    dto -> {
        if (dto.getDogs() == null || dto.getDogs().isEmpty()) {
            return null;
        }
        return dto.getDogs().get(0).getName();
    },
    Comparator.nullsFirst(String::compareTo)
));

方式二:将空dogs的MyDto排在最后面

myDtoList.sort(Comparator.comparing(
    dto -> {
        if (dto.getDogs() == null || dto.getDogs().isEmpty()) {
            return null;
        }
        return dto.getDogs().get(0).getName();
    },
    Comparator.nullsLast(String::compareTo)
));

如果不想用null,也可以用一个默认字符串(比如空串"")来替代,这样空dogs的MyDto会按默认字符串参与排序:

myDtoList.sort(Comparator.comparing(
    dto -> dto.getDogs() != null && !dto.getDogs().isEmpty() 
        ? dto.getDogs().get(0).getName() 
        : ""
));

内容的提问来源于stack exchange,提问作者Georgi Michev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 18:02:36