繁体   English   中英

概括一种方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM