我有以下虛擬代碼將 hasmap 中的雙精度串列保存到特定鍵,我希望能夠使用此緩沖區來計算每個鍵的平均值。
final int bufferSize = 5;
HashMap<Integer, List<Double>> testmap = new HashMap<Integer, List<Double>>();
List<Double> Values1 = Arrays.asList(1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9);
List<Double> Values2 = Arrays.asList(22.2,33.3,44.4,55.5,66.6,77.7,88.8,99.9);
List<Double> Values3 = Arrays.asList(333.3,444.4,555.5,666.6);
testmap.put(123456, Values1);
testmap.put(234567, Values2);
testmap.put(345678, Values3);
HashMap<Integer, CircularFifoBuffer> buffer = new HashMap<Integer, CircularFifoBuffer>();
for (Map.Entry<Integer, List<Double>> entry: testmap.entrySet()) {
Integer key = entry.getKey();
List<Double> value = entry.getValue();
CircularFifoBuffer bufferEntries = new CircularFifoBuffer(4);
for(Double val : value){
bufferEntries.add(val);
}
buffer.put(key, bufferEntries);
}
我現在想計算一個簡單的平均值
buffer.get(345678).stream().mapToDouble(d -> d).average().orElse(0.0)
它回傳“不兼容的型別:lambda 運算式中的錯誤回傳型別,無法轉換為 Double。我嘗試不使用 maptoDOuble,但后來我沒有得到 avg() 方法。任何人都知道為什么這不起作用
uj5u.com熱心網友回復:
CircularFifoBuffer不是通用的,它使用固定Object型別:
public boolean add(Object element)
然后,您必須指定確切的源型別,因為Object可以是任何型別。如果你寫
buffer.get(345678).stream().mapToDouble(d -> (Double) d).average().orElse(0.0)
^^^^^^
您的代碼編譯并產生預期的輸出
499.95000000000005
一個很好的閱讀可能是Java 泛型的基礎知識。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/435065.html
下一篇:無法呼叫擴展(JWT)OncePerRequestFilter。因為@Autowire失敗,所以this.Class回傳null
