我有这个方法
public static Integer addCollectionElements(List<Integer> list) {
return list.stream().reduce(0, Integer::sum).intValue();
}
我想概括为任何实现方法总和的类(例如Float)。
是否可以通过使用Java Generics实现这一目标?
答案 0 :(得分:5)
不幸的是,Number
基类没有sum
方法,因此您无法直接执行此操作。但是,您可以执行的操作是在您收到的每个doubleValue()
上致电Number
,并将它们作为双打加起来:
public static double addCollectionElements(List<? extends Number> list){
return list.stream().mapToDouble(Number::doubleValue).sum();
}
答案 1 :(得分:4)
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);
但我不相信你这样做会获得任何收益。