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

按布尔与Int字段排序时,Comparator.comparing方法提示无法解析如何解决?

嘿,这个问题我之前也踩过坑!你报错的核心原因是混淆了Comparable接口的compareTo方法和Comparator的用法——compareTo要求返回int类型的比较结果,但你直接return了一个Comparator对象,编译器当然找不到对应的方法啦。

下面给你两种可行的解决方案:

方案一:借助Comparator的compare方法得到结果

如果你还是想用Comparator的链式写法,只需要在最后调用compare(this, another),把当前对象和待比较对象传进去,就能得到int类型的返回值了。修改后的代码如下:

@Override
public int compareTo(MyViewModel another) {
    return Comparator.comparing(MyViewModel::isEnabled)
            .thenComparingInt(MyViewModel::getPriority)
            .compare(this, another);
}

方案二:手动实现比较逻辑(更轻量直观)

如果不想额外创建Comparator实例,也可以手动完成比较逻辑,步骤清晰还能减少对象开销:

  1. 先比较enabled字段,用Boolean.compare处理布尔值的比较
  2. 若enabled字段相同,再比较priority的整数值

代码示例:

@Override
public int compareTo(MyViewModel another) {
    // 先比较enabled:默认true比false大(返回1),如果要true排在前面,就加负号
    int enabledCompare = Boolean.compare(this.isEnabled(), another.isEnabled());
    if (enabledCompare != 0) {
        return enabledCompare;
        // 要是想让enabled=true的排在前面,改成 return -enabledCompare; 即可
    }
    // enabled相同,再比较priority
    return Integer.compare(this.getPriority(), another.getPriority());
}

两种方式都能解决问题,选哪种看个人习惯:链式写法更简洁,手动实现则更直观,性能上也略优一点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:34:28