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的多条件排序遵循「高优先级条件先判断」的规则:
- 高优先级判断库存状态:只要一个有库存一个无库存,直接按库存状态排序,不关心具体库存数值和价格
- 只有高优先级条件相等(都有库存/都无库存)时,才进入次优先级的价格比较,直接比较价格的分单位数值即可实现升序排序
内容的提问来源于stack exchange,提问作者HY2000
相关产品推荐
相关产品推荐

