概括一种方法

use*_*540 3 java generics java-8 java-stream

我有这个方法

public static Integer addCollectionElements(List<Integer> list) {
    return list.stream().reduce(0, Integer::sum).intValue();
} 
Run Code Online (Sandbox Code Playgroud)

我想推广到任何实现方法总和的类(例如Float).

是否可以通过使用Java Generics实现这一目标?

Mur*_*nik 5

不幸的是,Number基类没有sum方法,所以你不能直接这样做.但是,你可以做的就是给你收到的doubleValue()每个人打电话Number,并将它们作为双打来加:

public static double addCollectionElements(List<? extends Number> list){
    return list.stream().mapToDouble(Number::doubleValue).sum();
}
Run Code Online (Sandbox Code Playgroud)

  • 你根本不需要Double :: sum或者reduce方法.DoubleStream有自己的[sum()](http://docs.oracle.com/javase/8/docs/api/java/util/stream/DoubleStream.html#sum--)方法. (2认同)