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

Java 17中Comparator.comparingDouble报错问题咨询

问题分析与解决

错误原因

你遇到的类型不匹配错误,本质是用错了Comparator.comparingDouble的参数类型:

  • Comparator.comparingDouble()方法要求传入ToDoubleFunction<? super T>,也就是一个能把Video对象转换成double数值的函数(比如video -> 计算出的好评率),它会基于这个数值自动生成对应的Comparator。
  • 但你传入的是一个已经定义好的Comparator<Video>对象,这和方法要求的参数类型完全不兼容,所以编译器报错说找不到合适的类型让两者匹配。

两种修复方案

方案1:直接使用已定义的Comparator

既然你已经写好了完整的videoPercentLikeComparator,直接把它传给videos.sort()即可,不需要再套comparingDouble:

@Override
public void sort(List<Video> videos) {
    videos.sort(videoPercentLikeComparator);
}

方案2:用comparingDouble简化实现

如果想利用comparingDouble的简洁性,可以把原来的Comparator逻辑改成ToDoubleFunction,让方法帮你生成Comparator:

public static class SortByPercentLike implements VideoSorterInterface {
    @Override
    public void sort(List<Video> videos) {
        videos.sort(Comparator.comparingDouble(video -> 
            ((video.getLike() - video.getDislike()) / (double) video.getView())
        ));
    }
}

这样既省去了单独定义Comparator变量的步骤,也完全符合comparingDouble的参数要求。

额外补充:如果需要降序排序(比如把好评率高的视频放在前面),可以在调用链后追加.reversed():

videos.sort(Comparator.comparingDouble(video -> 
    ((video.getLike() - video.getDislike()) / (double) video.getView())
).reversed());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 07:32:07