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

Car对象列表按maker升序同maker按rate降序排序代码失效求助

问题排查

你的代码存在参数调用错误:在对maker属性做比较时,你始终将c1的maker和自身做比较,而非和c2的maker比较,导致maker比较的结果永远为0,永远会进入rate比较的分支,自然无法实现先按maker排序的规则。

修正后的代码

class Car {
    private String maker;
    private int rate;
    // 请确保你已经实现了getMaker、getRate方法
    public String getMaker() {
        return maker;
    }
    public int getRate() {
        return rate;
    }
}

@Override
public void f3(List<Car> t) {
    Collections.sort(t, (Car c1, Car c2) -> {
        // 修正为c1和c2的maker做比较
        int makerCompare = c1.getMaker().compareTo(c2.getMaker());
        if (makerCompare > 0) {
            return 1;
        } else if (makerCompare < 0) {
            return -1;
        } else {
            if(c1.getRate() > c2.getRate()) {
                return -1;
            } else if(c1.getRate() == c2.getRate()) {
                return 0;
            } else {
                return 1;
            }
        }
    });
}

更简洁的优化写法(Java 8+ 支持)

你可以直接用Comparator的链式调用实现规则,代码更简洁可读性更高,也不容易出现参数写错的问题:

@Override
public void f3(List<Car> t) {
    t.sort(Comparator.comparing(Car::getMaker)
            .thenComparing(Comparator.comparingInt(Car::getRate).reversed()));
}

内容的提问来源于stack exchange,提问作者Hoàng Huy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:24:04