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
相关产品推荐
相关产品推荐

