开发者社区> 问答> 正文

如何将方法作为参数传递

有一堆基本上在做相同事情的方法:根据类的前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 731 0
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
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
建立联系方法之一 立即下载
函数对象 立即下载
低代码开发师(初级)实战教程 立即下载