[英]Generalise a method
我有这个方法
public static Integer addCollectionElements(List<Integer> list) {
return list.stream().reduce(0, Integer::sum).intValue();
}
我想推广到任何实现方法总和的类(例如Float)。
是否可以通过使用Java Generics实现这一目标?
不幸的是, Number
基类没有sum
方法,所以你不能直接这样做。 但是,你可以做的是在你收到的每个Number
上调用doubleValue()
,并将它们作为双精度求和:
public static double addCollectionElements(List<? extends Number> list){
return list.stream().mapToDouble(Number::doubleValue).sum();
}
Integer.sum()
只是一个静态方法,可以用作BinaryOperator
。 没有办法使它“对于具有方法sum
对象是通用的”。 你可以做的是在方法中再添加两个参数,在这里您可以提供自己的sum
函数和初始值 - 在您的情况下为零。 一个极端的例子是:
public static <T extends Number> T addCollectionElements(List<T> list, T initialValue, BinaryOperator<T> sumFunction){
return list.stream().reduce(initialValue, sumFunction);
}
调用看起来像这样:
addCollectionElements(list, 0, Integer::sum);
但是我不相信你会这样做会有所收获。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.