Java Comparator,比较两个双精度:

Java Comparator, comparing two doubles:

提问人:OzanCinci 提问时间:11/12/2023 更新时间:11/12/2023 访问量:58

问:

我使用 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>

问题是什么

我不知道错误消息是什么意思。

java oop lambda 比较器 java-17

评论

1赞 tobias_k 11/12/2023
你不能做吗?videos.sort(Comparator.comparing(a -> ((a.getLike() - a.getDislike())/ (double) a.getView()))
1赞 user85421 11/12/2023
comparingDouble需要一个 ,即一个返回 - 它不需要(也不需要)第二个比较器 - 只需使用ToDoubleFunctiondoublevideos.sort(videoPercentLikeComparator)
1赞 Holger 11/13/2023
如果要使用 ,请不要手动实现。使用,例如comparingDoubleComparatorComparator<Video> videoPercentLikeComparator = Comparator.comparingDouble(v -> (v.getLike() - v.getDislike())/ (double)v.getView());

答:

4赞 Elliott Frisch 11/12/2023 #1

除非我错过了什么,否则应该只是videos.sort(Comparator.comparingDouble(videoPercentLikeComparator));videos.sort(videoPercentLikeComparator);