提问人:OzanCinci 提问时间:11/12/2023 更新时间:11/12/2023 访问量:58
Java Comparator,比较两个双精度:
Java Comparator, comparing two doubles:
问:
我使用 Java 17。这是我的代码:
public static class SortByPercentLike implements VideoSorterInterface {
// define Lambda Function
Comparator<Video> videoPercentLikeComparator = (a,b) -> {
Double firstVideoPercentLike = ((a.getLike() - a.getDislike())/ (double) a.getView());
Double secondVideoPercentLike = ((b.getLike() - b.getDislike())/ (double) b.getView());
return firstVideoPercentLike.compareTo(secondVideoPercentLike);
};
@Override
public void sort(List<Video> videos) {
videos.sort(Comparator.comparingDouble(videoPercentLikeComparator));
}
}
Comparator.comparingDouble(videoPercentLikeComparator)部分给了我错误:
reason: no instance(s) of type variable(s) T exist so that Comparator<Video> conforms to ToDoubleFunction<? super T>
问题是什么
我不知道错误消息是什么意思。
答:
4赞
Elliott Frisch
11/12/2023
#1
除非我错过了什么,否则应该只是videos.sort(Comparator.comparingDouble(videoPercentLikeComparator));
videos.sort(videoPercentLikeComparator);
评论
videos.sort(Comparator.comparing(a -> ((a.getLike() - a.getDislike())/ (double) a.getView()))
comparingDouble
需要一个 ,即一个返回 - 它不需要(也不需要)第二个比较器 - 只需使用ToDoubleFunction
double
videos.sort(videoPercentLikeComparator)
comparingDouble
Comparator
Comparator<Video> videoPercentLikeComparator = Comparator.comparingDouble(v -> (v.getLike() - v.getDislike())/ (double)v.getView());