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

Java Comparator实现商品先按有库存靠前再按价格升序排序报错求助

问题根因分析

你当前的代码存在两个核心问题:

  • 直接对库存数值做升序比较:0库存的数值更小,反而排在正库存商品之前,同时正库存商品内部会优先按库存数值排序,不符合规则要求
  • 未实现第二排序逻辑:同属有库存/无库存的商品,没有按价格升序做二次排序
修正代码

你只需要修改PriceStockComparator类的compare方法即可,不需要额外调用Collections.sort,多条件排序逻辑可以直接在Comparator内部实现:

static class PriceStockComparator implements Comparator<Product> {
    @Override
    public int compare(Product p1, Product p2) {
        // 第一步:先判断两个商品的库存状态(是否有库存)
        boolean p1HasStock = p1.stockLevel > 0;
        boolean p2HasStock = p2.stockLevel > 0;
        
        // 库存状态不同:有库存的排在前面
        if (p1HasStock != p2HasStock) {
            // p1有p2没有,p1排前面,返回-1;反之返回1
            return p1HasStock ? -1 : 1;
        }
        
        // 库存状态相同:按价格升序排序
        return Integer.compare(p1.priceCents, p2.priceCents);
    }
}
逻辑说明

Comparator的多条件排序遵循「高优先级条件先判断」的规则:

  1. 高优先级判断库存状态:只要一个有库存一个无库存,直接按库存状态排序,不关心具体库存数值和价格
  2. 只有高优先级条件相等(都有库存/都无库存)时,才进入次优先级的价格比较,直接比较价格的分单位数值即可实现升序排序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:57:02