我正在嘗試撰寫一種方法,該方法接受數值串列 - 例如List<Integer>,List<Float>等List<Double>- 并給我平均值。
public double getAverage(List<? extends Number> stats) {
double sum = 0.00;
if(!stats.isEmpty()) {
// sum = stats.stream()
// .reduce(0, (a, b) -> a b);
// return sum / stats.size();
}
}
這些是我得到的錯誤:
Operator ' ' cannot be applied to 'capture<? extends java.lang.Number>', 'capture<? extends java.lang.Number>'
uj5u.com熱心網友回復:
DoubleStream通過由Number物件創建一個Number#doubleValue(),然后使用可用的歸約方法計算平均值:
public double getAverage(List<? extends Number> stats) {
return stats.stream()
.mapToDouble(Number::doubleValue)
.summaryStatistics() // small overhead of unnecessary arithmetic
.getAverage(); // returns 0 when empty
}
或者
public double getAverage(List<? extends Number> stats) {
return stats.stream()
.mapToDouble(Number::doubleValue)
.average()
.orElse(0); // explicit value for empty (but no other value makes sense)
}
取決于你喜歡哪種風格。
uj5u.com熱心網友回復:
可選雙平均()
其中, OptionalDouble 是一個容器物件,它可能包含也可能不包含雙精度值。
public class Test {
public static OptionalDouble getAverage(List<? extends Number> stats) {
return stats.
stream().
mapToDouble(d -> d.doubleValue()).
average();
}
public static void main(String[] args) throws IOException {
List<Integer> list = Arrays.asList(1, 4, 5, 67, 3);
if(getAverage(list).isPresent());
{
Double average = getAverage(list).getAsDouble();
System.out.println(average);
}
}
}
或者
使用古爾格番石榴
Double averge = Stats.meanOf(list);
它在語法上得到簡化
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/470408.html
上一篇:實作介面的指標的泛型型別是什么?
