有一堆基本上在做相同事情的方法:根据类的前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()); } 如何传递的方法,只是有一个方法是什么?
您可以使用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()); }
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。