我正在用 java 重新創建類似于 pandas dataframe 的東西來讀取 csv 文件和操作數據。我將所有代碼都編碼為通用的,以處理 csv 文件中的任何類型的列,以及自動聲明包裝類,例如 Integer 和 Double(如果它是數字)。問題是現在我正在編寫只涉及數字列的函數,但我仍然需要進行大量的強制轉換以獲得實際值,我想找到一個更優雅的解決方案。我已經嘗試在方法中進行強制轉換并且它有效但是我正在尋找一種方法來返回數值如果它是列類中的數字以避免為將來的函數這樣做: //the basic structure public class Column<T> { public String type; //column type public String name; //column name public ArrayList<T> values; //array of values... public T getValue(int index) { return values.get(index); }}//in another file is the problempublic static double variance(Column c) { double mean = mean(c); double var = 0; for(int i = 0;i < c.getLength();i++) { // here is the problem var = Math.pow((((Number) c.getValue(i)).doubleValue()-mean),2); } return var/c.getLength(); }
1 回答

躍然一笑
TA貢獻1826條經驗 獲得超6個贊
如果您可以自由地修改您的Column類或創建另一個更具體的子類,而不是在對象外部進行強制轉換,您可以添加方法以在內部返回一個雙精度數(如果它是雙精度型),如果它是一個整數則返回一個整數等,因為在您的示例中,您知道那Column是一個Column<Number>. 例如:
public class DoubleColumn extends Column<Number> {
@Override
public Double getValue(int index) {
return super.getValue(index).doubleValue();
}
}
然后,您可以相應地修改方差方法以采用 aDoubleColumn而不是 a Column。
添加回答
舉報
0/150
提交
取消