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

自定义排序含ID属性的对象:将ID为0的对象置于非0ID之后

如何将ID为0的对象排在列表末尾?

C# 实现

方法1:LINQ拆分合并

直接拆分出非0 ID的对象放在前面,再拼接ID为0的对象,还可对非0部分附加排序规则:

var sortedList = originalList.Where(x => x.ID != 0)
                             .OrderBy(x => x.ID) // 可选:非0对象按ID升序,也可替换为OrderBy(x => x.Name)
                             .Concat(originalList.Where(x => x.ID == 0))
                             .ToList();

方法2:自定义排序键

通过排序键让非0对象优先级更高,同时支持多级排序:

var sortedList = originalList.OrderBy(x => x.ID == 0 ? 1 : 0)
                             .ThenBy(x => x.ID) // 可选:非0对象按ID排序
                             .ThenBy(x => x.Name) // 可选:再按Name排序
                             .ToList();

Java 实现

方法1:自定义Comparator

List<SomeClass> sortedList = new ArrayList<>(originalList);
sortedList.sort((a, b) -> {
    // 优先把非0 ID对象放前面
    if (a.getId() == 0 && b.getId() != 0) return 1;
    if (a.getId() != 0 && b.getId() == 0) return -1;
    // 非0对象间按ID升序,可替换为a.getName().compareTo(b.getName())按Name排序
    return Integer.compare(a.getId(), b.getId());
});

方法2:Stream API

List<SomeClass> sortedList = originalList.stream()
    .sorted((a, b) -> {
        if (a.getId() == 0 && b.getId() != 0) return 1;
        if (a.getId() != 0 && b.getId() == 0) return -1;
        return Integer.compare(a.getId(), b.getId());
    })
    .collect(Collectors.toList());

Python 实现

利用排序键的权重区分0与非0对象,支持多级排序:

# 假设对象列表为obj_list,每个对象含id和name属性
obj_list.sort(key=lambda x: (1 if x.id == 0 else 0, x.id, x.name))

解释:排序元组第一个元素控制0/非0的顺序(非0权重为0,排在前面),后续元素可按需设置非0对象的排序规则(如ID、Name)。


内容的提问来源于stack exchange,提问作者Paul Williams

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:40:43