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

实现含可空Integer字段vintage的IProduct对象Comparator对比方法

实现带可空Integer类型vintage字段的IProduct比较器

我来帮你补全这个Comparator<IProduct>的实现,覆盖所有null场景和可空vintage字段的对比逻辑:

@Override
public int compare(IProduct product1, IProduct product2) throws ProductComparisonException {
    // 两个产品都为null时,视为相等
    if (product1 == null && product2 == null) {
        return 0;
    }
    // 仅product1为null:将null对象排在非null对象之前,可按需调整顺序
    if (product1 == null) {
        return -1;
    }
    // 仅product2为null
    if (product2 == null) {
        return 1;
    }
    
    // 两个产品都不为null,开始处理vintage字段
    Integer vintage1 = product1.getVintage();
    Integer vintage2 = product2.getVintage();
    
    // 两个vintage都为null,视为相等
    if (vintage1 == null && vintage2 == null) {
        return 0;
    }
    // 仅vintage1为null:将null值的vintage排在非null之前,可按需修改
    if (vintage1 == null) {
        return -1;
    }
    // 仅vintage2为null
    if (vintage2 == null) {
        return 1;
    }
    
    // 两个vintage都不为null,直接比较数值大小
    return vintage1.compareTo(vintage2);
}

关键细节说明:

  • 对象null排序规则:遵循通用的排序约定——null对象优先级低于非null对象(排在前面),如果业务需要反转,只需把对应分支的-1和1互换即可。
  • 字段null处理逻辑:同样将null值的vintage排在非null值前面,你可以根据实际需求调整(比如让非null的vintage优先)。
  • 异常兼容:因为方法声明了throws ProductComparisonException,如果getVintage()方法本身可能抛出异常,你可以在获取字段时添加try-catch块,将异常包装后抛出。
  • 安全的Integer比较:直接使用Integer.compareTo()方法,避免手动拆箱可能引发的NullPointerException(这里已经提前处理了vintage为null的情况,所以调用是安全的)。

如果需要按vintage降序排列,只需要把最后一行的比较逻辑改成return vintage2.compareTo(vintage1);即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:20:54