开发者社区 问答 正文

如何将方法作为参数传递

有一堆基本上在做相同事情的方法:根据类的前N个实例(由其不同方法返回的值都返回double值)来选择。

因此,例如,对于实现以下接口的类的对象:

interface A { Double getSalary(); Double getAge(); Double getHeight(); } 我想选择每个方法返回的值最高的N个对象。

现在,我有3种方法:

List getTopItemsBySalary(List elements); List getTopItemsByAge(List elements); List getTopItemsByHeight(List elements);

List getTopItemsBySalary(List elements, int n) { return elements.stream() .filter(a -> a.getSalary() != null)
.sorted(Comparator.comparingDouble(A::getSalary).reversed()) .limit(n) .collect(Collectors.toList()); } 如何传递的方法,只是有一个方法是什么?

展开
收起
小六码奴 2019-10-03 19:37:16 781 分享 版权
1 条回答
写回答
取消 提交回答
  • 您可以使用Function转换A为的Double,例如:

    List getTopItems(List elements, Function<A, Double> mapper, int n) { return elements.stream() .filter(a -> null != mapper.apply(a))
    .sorted(Comparator.comparingDouble(a -> mapper.apply(a)) .reversed()) .limit(n) .collect(Collectors.toList()); } 您可以使用以下命令调用它:

    List top10BySalary = getTopItems(list, A::getSalary, 10); List top10ByAge = getTopItems(list, A::getAge, 10); 如果期望您的getter总是返回非空值,那么ToDoubleFunction使用它是一种更好的类型(但如果您的Double返回值可能为null ,它将无法正常工作):

    List getTopItems(List elements, ToDoubleFunction mapper, int n) { return elements.stream() .sorted(Comparator.comparingDouble(mapper).reversed()) .limit(n) .collect(Collectors.toList()); }

    2019-10-09 15:44:43
    赞同 展开评论
问答地址: